我有一个UserShow
组件,它显示用户的数据(姓名,电子邮件等),以及他在网站上通过关系(写的消息,喜欢等)所做的动作。现在我想允许用户更改他的一些数据(姓名,电子邮件等),所以我写了另一个组件称为UserEdit
这里是表单,验证等。一切正常
由于我使用Livewire/Alpine,我有一些逻辑,如
<div x-data="{ isEditing = @entangle('isEditing) }">
<section x-show="!isEditing" />
...All user data...
<button x-on:click="isEditing=true">
<section>
<section x-show="isEditing">
<livewire:user.user-edit :user="$user" />
</section>
</div>
因此,这是可行的-它打开了用户将编辑其数据的组件。在表单末尾的组件中,我有两个按钮:
<div>
<button type="submit">update</x-gui.button>
<button type="button" wire:click="canceled">Cancel</button>
</div>
组件中取消的功能为:
public function canceled() {
Log::info('Canceling Edit');
$this->emitUp('canceled');
}
现在,在父元素中,我有listener和函数定义为:
protected $listeners = ['canceled' => 'restart'];
public function restart() {
Log::info('canceled received');
}
当我单击组件中的cancel方法时,我看到第一个日志“Canceling Edit”,但没有看到“canceled received”消息
我做错什么了吗?我怎么知道“取消”的事件是否被触发了?
- 我试过从按钮使用
$emit('canceled')
,但没有日志发生同样的事情 - 我也试过Laravel Livewire emit event not fire
1条答案
按热度按时间rsaldnfx1#
我发现发生了什么,这是一个非常奇怪的行为,所以它花了很长时间来调试。
这个非常具体的组件中的问题是,它显示了foreach中的所有消息,比如:
所有用户数据都有一个
@foreach()
,它正在呈现另一个组件:问题是这个livewire组件没有被键控,这导致了各种奇怪的事情发生,改变线路如下,解决了问题
所以,警示性的故事是:始终在循环中键入组件,即使它们只是用于显示信息,而不是对其进行操作