我在我的项目中实施了Laravel Broadcasting。一切都运转良好,但我想知道是否可以听取所有事件而不仅仅是特定事件?
目前我的前端有这个代码:
window.Echo.channel('office-dashboard')
.listen('CompanyUpdated', (e) => {
console.log(e.company);
});
.listen('CompanyDeleted', (e) => {
console.log(e.company);
});
我想以这样的方式构建我的事件,以便我可以抓住它究竟是什么样的事件,以及执行了什么样的动作。但是,如果我仍然必须专门听取每个事件,那就没用了,就像我现在这样。我想听一个频道中的所有事件,这可能吗?
我读了docs,但那些只讨论如何收听特定事件。
答案 0 :(得分: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
})
})
})
答案 1 :(得分:0)
是的。
您将必须访问PrivateChannel
内的echo
实例并创建一个全局侦听器:
channel.bind_global(function (event, data) {
console.log(`The event ${event} was triggered with data ${data}`);
})
请参阅https://github.com/pusher/pusher-js#bind_global-and-unbind_global
答案 2 :(得分:0)
是的,这是可能的,我 5 分钟前刚刚在我的应用中实现了它。 在所有事件中使用 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 语句或传递函数名称以直接调用,每个事件的优缺点。