开发者问题收集

Livewire + AlpineJS:使用 x-data 作为 wire:click 参数

2020-10-13
5428

我有一个 Laravel Blade 模板,其中有一个 AlpineJS div 定义如下:

<div x-data="{ id: 2 }">
   ...
   <button type="button" wire:click="deleteAddress(id)">Button</button>
</div>

我想要的是以某种方式将该 id 变量“传递”到 wire:click 调用。

上面的代码在我的 JS 控制台中抛出 Uncaught ReferenceError: id is not defined 。 有什么想法吗?刚开始使用 TALL 堆栈,我还不知道最佳工作流程。

提前致谢。

2个回答

您可以将 Alpine 点击监听器与 magic $wire 结合使用,如下所述: https://laravel-livewire.com/docs/2.x/alpine-js

这样,您将留在 Alpine 内部,但可以访问您的 Livewire 组件方法。因此它将是:

<div x-data="{ id: 2 }">
   ...
   <button type="button" @click="$wire.deleteAddress(id)">Button</button>
</div>
morethanctrlc
2021-04-08

将 wire:key 添加到与 x-data 相同的 div。

<div wire:key="id" x-data="{ id: 2 }">
   ...
   <button type="button" wire:click="deleteAddress(id)">Button</button>
</div>

我认为这是因为 Livewire 仅更新正在更改的内容。并且 x-data div 是 alpine 组件的顶部 div。因此,如果您将 id 作为 wire:key 添加到包含 x-data 的 div,那么此 div 也将更新并重新运行 alpine 组件。

Yolan Mees
2021-03-06