【问题标题】:Liveware.emit not working in global javascriptLivewire.emit 在全局 javascript 中不起作用
【发布时间】:2021-08-06 11:28:35
【问题描述】:

我在一个活件刀片文件中有一个 laravel 发射,如下所示:

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

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

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

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

为什么我在&lt;script&gt; 标签内的发射不起作用? 在 setTimeout 之后我该怎么做才能发出事件?

【问题讨论】:

    标签: javascript laravel laravel-livewire


    【解决方案1】:

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

    protected $listeners ['nextSlot'];
    

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

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

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

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

    【讨论】:

    • 这对我有用,liveware:load 也对我有用,所以我刚刚更新了 nextSlot 监听器,现在它可以工作了。谢谢。
    • @AsaadMahmood 你说得对livewire:load。这是我不小心将L 大写的问题。
    【解决方案2】:

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

    【讨论】:

    • 在原帖中添加。我认为我没有添加到 listeners 数组中。我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多