【问题标题】:Pusher and Vue.js components not leaving channel when using Vue RouterPusher 和 Vue.js 组件在使用 Vue Router 时不会离开通道
【发布时间】:2017-04-08 17:06:19
【问题描述】:

我正在使用带有 Laravel Echo 的 Pusher 来为我的应用程序中的某些区域创建存在通道。 我所有的前端路由都是使用 Vue Router 完成的。

在路由之间切换时,Vue 路由器会根据我的路由设置加载某些组件。效果很好,但是,Pusher 不会自动断开用户与这些频道的连接。仅当我运行整页刷新时才会发生这种情况,这不是我想要的。

在我的组件中,加入 Pusher 频道的 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 路由断开用户与频道的连接?

谢谢。

【问题讨论】:

  • Echo.leave('transaction.' + this.tid);?

标签: javascript laravel vue.js pusher laravel-echo


【解决方案1】:

我相信 Vue Router 出于性能原因可能会保持组件实例处于活动状态。因此,即使在组件之间进行路由时,websocket 通道仍然可以连接。

为了防止这个问题,你可以使用Vue的组件destroyed方法手动离开频道。

由于您使用的是 Laravel 的 Echo,您只需:Echo.leave('channel-name')

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

【讨论】:

  • 我在这里遇到了这个问题的相反情况@crabbly 一旦我通过 vue-router 导航到另一条路线然后回到我的主页我希望它加载所有在线用户的列表,但 echo 没有除非我刷新整页,否则开火stackoverflow.com/questions/53693368/…
  • @dapo 我在那里发布了一个答案,我认为它可以解决这个问题。我希望它有所帮助。
猜你喜欢
  • 2018-11-20
  • 2020-09-21
  • 1970-01-01
  • 2020-04-05
  • 2016-11-08
  • 2017-09-05
  • 2020-04-14
  • 2018-12-21
  • 2019-06-23
相关资源
最近更新 更多