首页 > 解决方案 > 无法让 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']; 在此处输入图像描述

显然我理解文档错误,但不知道问题出在哪里。

任何帮助深表感谢!

先感谢您 :)

标签: laravelevent-listenerlaravel-livewire

解决方案


您的代码有问题,所以让我来帮助您。从孩子发出后(确保这很好)只需要在父组件中有这个

家长

protected $listeners = ['refreshKanbans' => '$refresh'];
  
public function render()
    {
        $this->kanbans = Kanban::where('status', $this->active)
                            ->orderBy('order', 'ASC')
                            ->get();
        return view('livewire.kanbans.view-sidebar');
    }

让我知道


推荐阅读