Laravel Livewire,两个 livewire 组件之间的通信

Posted

技术标签:

【中文标题】Laravel Livewire,两个 livewire 组件之间的通信【英文标题】:Laravel Livewire, communication between two livewire components 【发布时间】:2020-08-03 09:38:20 【问题描述】:

我有 2 个 livewire 组件,第一个只显示购物车的会话变量,第二个只是在购物车中添加商品(带有 sku、标题、价格和数量的非常原始的表单)。

<livewire:shoppingcart :cart="$CartId">

<livewire:order-add-product-form :orderAddProductCartId="$CartId">

这两个组件本身都运行良好。但是当我从第二个组件添加项目时,它会更新购物车会话变量,但视图永远不会更新。我必须刷新页面才能在购物车视图中看到会话变量。

是否可以将两个组件连接在一起。那么,当我从一个组件向购物车添加商品时,它会自动更新其他组件的视图?

谢谢

【问题讨论】:

laravel-livewire.com/docs/2.x/events#scope-to-parents 【参考方案1】:

添加新产品后,您可以从第二个组件发出如下事件:

$this->emit('cart:update');

查看文档:Livewire Events

现在您可以从第一个组件监听事件并使用名为 $refresh 的 livewire 的特殊操作

查看文档:Special Actions

protected $listeners = [
    'cart:update' => '$refresh',
];

我认为这可以解决您的问题。

【讨论】:

谢谢。这就是我一直在寻找的。​​span> 这是我的荣幸。

以上是关于Laravel Livewire,两个 livewire 组件之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

Laravel-Livewire 如何触发事件并监听它们?

Laravel 和 Livewire 在单击时更改按钮样式

laravel livewire,如何通过单击将 id 或数据传递给另一个组件

Laravel-livewire:为啥触发事件会执行 render() 方法?

Laravel 8 和 Livewire - 查询不起作用

laravel - livewire 整页组件