laravel - 无法让 Livewire 事件 Emit 和 Listen 工作
问题描述
我正在尝试设置一个事件侦听器,以便当子 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
我也尝试过这种方法,调用发射$this->emit('updateKanbanSidebar');
并像这样设置监听器protected $listeners = ['updateKanbanSidebar' => 'refreshKanbans'];
显然我理解文档错误,但不知道问题出在哪里。
任何帮助深表感谢!
先感谢您 :)
解决方案
您的代码有问题,所以让我来帮助您。从孩子发出后(确保这很好)只需要在父组件中有这个
家长
protected $listeners = ['refreshKanbans' => '$refresh'];
public function render()
{
$this->kanbans = Kanban::where('status', $this->active)
->orderBy('order', 'ASC')
->get();
return view('livewire.kanbans.view-sidebar');
}
让我知道
推荐阅读
- c - 如何修复/调试“左值需要作为赋值的左操作数”错误?
- python - Python计算forloop的剩余时间?
- javascript - 如何使用 JavaScript 访问数组中的特定对象?
- javascript - 无法从 firebase firestore get().then() 响应调用 firebase 云功能
- java - 我正在尝试使用 servlet 做简单的 hello world 程序。但我收到错误 HTTP 状态 405 - 方法不允许
- java - 如何将 HTTP API 公开为 Flink 源
- typescript - 打字稿 - 每月第 31 天的日期返回第 30 天的 ISOString
- r - Devtolls 文档功能不会创建 NAMESPACE 文件
- reactjs - React 组件加载不停
- redux - Redux 工具包 - 更新对象中的键值