javascript - 使用 Vue Router 时 Pusher 和 Vue.js 组件不会离开 channel

标签 javascript laravel vue.js pusher laravel-echo

我将 Pusher 与 Laravel Echo 结合使用,为我的应用程序中的某些区域创建状态 channel 。 我所有的前端路由都是使用 Vue Router 完成的。

在路由之间切换时,Vue router 会根据我的路由设置加载某些组件。它工作得很好,但是,Pusher 不会自动断开用户与这些 channel 的连接。它只会在我运行整页刷新时发生,这不是我想要的。

在我的组件中,加入Pusher channel 的js代码在mounted里面,像这样:

    data() {
        return {
            users: [],
        }
    },
    mounted() {
        Echo.join('transaction.' + this.tid)
            .here(users => {
                this.users = users;
                }
            })
            .joining(user => {
                this.users.push(user);
            })
            .leaving(user => {
                this.users.splice(this.users.indexOf(user), 1);
            });
    },
    methods: {
        // ...
    },

如何在不刷新页面的情况下使用 Vue Router 路由断开用户与 channel 的连接?

谢谢。

最佳答案

我相信 Vue Router 可能出于性能原因使组件实例保持事件状态。因此,即使在组件之间路由时,websocket channel 仍然可以连接。

为避免此问题,您可以使用 Vue 的组件 destroyed 方法手动离开 channel 。

因为你使用的是 Laravel 的 Echo,所以你需要做的就是:Echo.leave('channel-name')

...
methods: {
    // ...
},
destroyed() {
    Echo.leave('transaction.' + this.tid);
}

关于javascript - 使用 Vue Router 时 Pusher 和 Vue.js 组件不会离开 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43297987/

相关文章:

javascript - 缩放和居中不同尺寸的图像,并在 CSS 中使用右对齐文本

javascript - 从客户端发出 Instagram API 请求安全吗?

php - 如何在 Laravel 中向数据库中插入多行?

node.js - 使用 MERN 堆栈构建 Web 应用程序与使用 Laravel(使用 React)构建 Web 应用程序有什么区别?

javascript - Vue.js 中的 Vuelidate 自定义验证函数

javascript - Vue 3 - inject() 只能在 setup() 或功能组件内部使用

c# - 如何将 Vue.js 添加到现有的 ASP .NET Core 2.0 MVC 项目中?

JavaScript - 找出参数的来源

javascript - 原型(prototype)内部的事件触发

php - 如何将旧的 MySQL 数据库迁移到 Laravel 项目中?