【发布时间】:2021-06-28 05:26:18
【问题描述】:
我正在尝试设置一个事件侦听器,以便当子 livewire 组件更新标题时,它会刷新父组件以显示更新,而不必硬刷新页面以查看更新。
这是一个快速 gif,显示正在发生的事情
我有 2 个 livewire 组件。
父级 = ViewSidebar.php / view-sidebar.blade.php
// view-sidebar.blade.php
@foreach ($kanbans as $kanban )
@livewire('kanbans.show-sidebar-kanban', ['kanban'=>$kanban], key($kanban->id))
@endforeach
// ViewSidebar.php
public $kanbans;
protected $listeners = ['refreshKanbans'];
public function refreshKanbans()
{
$this->kanbans = Kanban::where('status', $this->active)
->orderBy('order', 'ASC')
->get();
}
public function mount()
{
$this->refreshKanbans();
}
public function render()
{
return view('livewire.kanbans.view-sidebar');
}
在子组件中我设置了这个
public function updateKanban($id)
{
$this->validate([
'title' => 'required',
]);
$id = Kanban::find($id);
if ($id) {
$id->update([
'title' => $this->title,
]);
}
$this->resetInputFields();
$this->emit('refreshKanbans');
}
所有文件都在一个名为kanbans 的子文件夹中,这会破坏它吗?
尝试遵循这些文档https://laravel-livewire.com/docs/2.x/events
我也尝试了这种方法,调用了 emit $this->emit('updateKanbanSidebar'); 并像这样设置监听器 protected $listeners = ['updateKanbanSidebar' => 'refreshKanbans'];
显然我对文档的理解有误,但不知道问题出在哪里。
非常感谢任何帮助!
提前谢谢你:)
【问题讨论】:
-
你确定你的父组件中的事件被触发了吗?
-
感谢您的提示 :),在看到发射低谷后,我进入了不同解决方案的兔子洞
标签: laravel event-listener laravel-livewire