Laravel Echo:是否可以监听所有事件而不是特定的事件?

6
我在我的项目中实现了Laravel广播。一切都正常工作,但我想知道是否有可能监听所有事件而不仅仅是特定的事件?
目前,我在我的前端代码中使用以下代码:
window.Echo.channel('office-dashboard')
  .listen('CompanyUpdated', (e) => {
    console.log(e.company);
  });
  .listen('CompanyDeleted', (e) => {
    console.log(e.company);
  });

我希望以某种方式组织我的事件,以便我可以准确抓取事件的类型和执行的操作。但如果我仍然必须特别监听每个事件,那就毫无用处,就像现在一样。我想监听频道中的所有事件,这可能吗?
我阅读了文档,但那些只谈到如何监听特定事件。

2
我不这么认为,但我认为你可以调整广播器以在一个通道上发射多个值,然后返回该值。JavaScript 应该读取的是对象。 - mutantkeyboard
4个回答

6
如果您使用 pusher 作为广播驱动程序,您可以从 Laravel Echo 实例中访问 listenToAll() 方法。简而言之,您可以执行以下操作来监听特定频道上的所有事件:
Echo.private(`office-dashboard`)
   .listenToAll((event, data) => {
      // do what you need to do based on the event name and data
      console.log(event, data)
   });
< p > listenToAll() 方法只需要一个参数,一个回调函数,该函数将接收事件名称作为第一个参数以及与事件相关的任何数据作为第二个参数。


2

是的,这是可能的。我刚刚在我的应用程序上实现了它,只需要在所有事件中使用broadcastAs,如此描述:

https://laravel.com/docs/8.x/broadcasting#broadcast-name

然后,您可以使用broadcastWith函数包含事件的名称:

https://laravel.com/docs/8.x/broadcasting#broadcast-data

--- 服务器端 ---
public function broadcastWith()
{
    return[
        'id' => 'RoomJoined',
        'message' => 'new user joined the room!'
    ];
}

public function broadcastAs()
{
    return 'event';
}

--- 客户端 ---
window.Echo.channel(this.channel).listen(".event", response => {
  console.log(response);
});

为了区分事件,你可以在监听器中使用if语句,或者直接传递函数名称以直接调用。每种方法都有优缺点。

2

我遇到过相同的情况。我认为你需要单独监听每个频道。但你可以像下面这样写更简洁的代码。

    const channel = window.Echo.channel('office-dashboard')

    const eventsTolisten = [
      'CompanyUpdated',
      'CompanyDeleted',
    ]

    eventsTolisten.forEach(event => {
      channel.listen(event, e => {
        this.handleSocketEvents({
          name: event,
          data: e.data
        })
      })
    })

0
在 listen 方法中,将 '*' 作为事件名称传递。
window.Echo.channel('office-dashboard').listen('*', (e) => {
   console.log(e.company);
});

那个不起作用,你试过了吗? - undefined
@shamaseen 是的。它有效。 - undefined
这个听起来很酷,但对我也不起作用 - 也许是因为Ably的分支问题...我在前端使用的是@ably/laravel-echo 1.0.3版本。最后,listenToAll(...)对我起作用了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接