使用 2 个组件通过 Livewire 传递数据时出现问题
2023-01-20
420
我想将数据从 Livewire 组件 A 传递到 Livewire 组件 B。目标是在需要时打开社交图标栏。
这是我的设置:
组件 1 类:
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class SocialShareBar extends Component
{
public $show;
protected $listeners = ['openSharePopup' => 'openSharePopup'];
public function mount() {
$this->show = false;
}
public function openSharePopup() {
$this->show = true;
$this->emit('openPopup', ['show' => $this->show ]);
//Hoping to emit to the component B here
}
public function render()
{
return view('livewire.social-share-bar');
}
}
组件 B:
<?php
namespace App\Http\Livewire;
use Livewire\Component;
class SharePopup extends Component
{
public $show;
protected $listeners = ['openPopup' => 'render'];
//I have hoping to catch the "emit" event here
public function render()
{
return view('livewire.popups.share-popup', ['show'=> true]);
}
}
一个组件位于“app.blade.php”主布局文件中,另一个组件位于 Laravel 的 footer.blade.php 中(它本身已传递给 app.blade.php 文件。
每个文件都位于其自己的 Livewire 位置: resources\views\livewire\popups\share-popup resources\views\livewire\social-share-bar
我目前无法在第二个组件中捕获以下事件:
protected $listeners = ['openPopup' => 'render'];
问题可能是“受保护”的范围?
谢谢!
1个回答
为了让第二个组件从第一个组件获取数据,您必须从第一个组件事件中传入数据,并在第二个组件事件中监听它。
您已经在这里传递了来自组件 A 的数据,
$this->emit('openPopup', ['show' => $this->show ]);
因此,您需要做的就是在组件 B 中监听它,
class SharePopup extends Component
{
public $show;
protected $listeners = ['openPopup'];
public function openPopup($show)
{
$this->show = $show;
}
public function render()
{
return view('livewire.popups.share-popup');
}
}
然后在组件 B 的视图中,如果您想使用 Alpine,您可以这样做,
<div x-data="{ show: $wire.entangle('show') }" x-show="show"></div>
Qirel
2023-01-23