【发布时间】:2020-11-19 16:15:27
【问题描述】:
我有nested Livewire components,其中“孩子”fires an event 到“父母”。
问题是从孩子的 (mount) 方法触发时它没有到达侦听器。
从子级触发事件时,侦听器可能还不可用?
它在从孩子的刀片上射击时确实有效,使用 wire:click="$emit(...)" 或全局 JavaScript。
我的设置类比:first 方法获取帖子,second 方法获取+管理评论,我想让first 知道页面上有多少 cmets,以便它可以更新计数器.这可以作为我获得评论的 mount() 的一部分来完成。
如何从孩子的 mount() 方法触发事件,和/或其他方式更合适?
First.php
protected $listeners = ['testEmit'];
public function testEmit() {
Log::info("testEmit listener"); // only received when firing from blade
}
first.blade.php
@livewire('second')
Second.php
public function buttonClick()
{
// works
$this->emit('testEmit', 'Second (method buttonClick)');
}
public function mount()
{
// not working (is sent but not received)
$this->emit('testEmit', 'Second (method mount)');
}
public function render()
{
// does not work (does work after buttonClick emit)
$this->emit('testEmit', 'Second (method render)');
return view('livewire.second')->layout('layouts.guest');
}
second.blade.php
<div>
<button wire:click="$emit('testEmit')"> <!-- this works fine -->
</div>
<div>
<button wire:click="buttonClick">test (calls method)</button>
</div>
<script>
// Livewire.emit('testEmit') // this works fine
</script>
更新:向 Second.php 和 second.blade.php 添加更多详细信息/示例
【问题讨论】:
-
尝试在
render()menthod 下发射。 -
那行不通。它只会在调用方法后才在渲染中调用发射。我将更新上面的示例以显示详细信息。
-
你有没有得到这个工作@wivku?我也是这种情况
-
不,情况没有改变。