Liveware.emit 无法在全球工作 javascript

Liveware.emit not working in global javascript

我在 liveware blade 文件中有一个 laravel 发射,如下所示:

<script>
    document.addEventListener('livewire:load', function () {
        setTimeout(()=>{
            Livewire.emit('nextSlot');
        }, 4000);
    });
</script>

这不起作用,它不会在受尊重的 php 文件中发出 nextSlot 函数。

注意,这个 hwoever 确实按预期工作:

<button wire:click="nextSlot">
    Next Slot
</button>

为什么我在 <script> 标签内发出的信号不起作用? 我该怎么做才能在 setTimeout 后发出事件?

如果您的 wire:click 有效但 Livewire.emit 无效,这可能是由不同类型引起的。点击是一个特定事件,直接调用相关方法,而emit只调用方法,如果listeners数组包含它。你有没有把它添加到听众?如果你分享你的组件代码,它应该更容易调试。

您需要在您的组件上为您的客户端事件添加一个事件侦听器:

protected $listeners ['nextSlot'];

以上将侦听引发的 nextSlot 事件,并在您的组件中调用一个名为 nextSlot 的方法。如果您的事件名称和方法不匹配,您需要指定要调用的方法的名称。

protected $listeners = ['nextSlot' => 'methodName'];

另请注意,您的 nextSlot 事件将在 4 秒后触发一次。不确定这是否是您想要的,或者您是否希望每 4 秒触发一次事件。如果您想要后者,请将 setTimeout() 替换为 setInterval()

document.addEventListener('livewire:load', function () {
    setInterval(() => Livewire.emit('nextSlot'), 4000);
})