【问题标题】:How to reload one livewire component from another component?如何从另一个组件重新加载一个 livewire 组件?
【发布时间】:2022-01-02 13:31:48
【问题描述】:

我有名为 TopicSolution、AddToCart 和 CartCounter 的组件。单击“添加到购物车”按钮后,我想更新 CartCounter 值,但购物车计数器未更新。

  1. 我有一个名为 topic-solutions 的 livewire 组件,它位于 livewire 文件夹中,该组件还有另一个名为 add-to-cart 的组件,位于 livewire > cart 文件夹中(注意:它有父 div)

    see code

  2. 添加到购物车组件的视图具有此代码

    加入购物车

  3. 当点击添加到购物车按钮时,它会发出 updateCartCounter,这是 livewire>cart 中的另一个组件

    $this->emit('updateCartCounter');

  4. 并且 CartCounter 有名为 updateCartCounter 的侦听器

    受保护的 $listeners = [ 'updateCartCounter' => '渲染' ]; 我也尝试了以下代码

    受保护的 $listeners = [ 'updateCartCounter' => '$refresh' ];

但是没有用。 CartCounter 组件没有刷新/重新加载。

【问题讨论】:

  • 如果要刷新组件,请使用魔术方法'cartCounterUpdate' => '$refresh',
  • @Qirel 我也试过那个也没用。我在子文件夹中创建了这些组件,也许这就是出现问题的原因。如子文件夹的问题所示,它是发出侦听器的正确方法吗??
  • 不管它是否在子文件夹中。两个组件是否加载在同一页面上?
  • @Qirel 是的,我在同一个页面中使用了两个组件,并且我还在一个组件中使用了该组件。
  • @Qirel 看看我更新了一个问题

标签: laravel components laravel-livewire


【解决方案1】:

正如@Quirel 向您建议的那样,您可以直接在侦听器中使用魔术方法“$refresh”。测试它开发这样的方法

protected $listeners = [
    'cartCounterUpdate'
];

public function cartCounterUpdate()
{
   dd('the event was emited');
}

【讨论】:

  • 是的,我按照你说的做了同样的测试,它可以工作,但是 cartcounter 组件没有刷新。
  • 那么你应该分享你正在编写的代码并向我们解释你对它的期望
  • 看看我更新了一个问题
猜你喜欢
  • 2021-09-14
  • 2020-04-30
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2019-04-19
  • 2017-09-21
  • 2021-08-17
  • 2020-08-09
相关资源
最近更新 更多