这个应用程序是一个聊天应用,使用laravel和Vue,一旦用户登录他看到所有在线用户的列表,我在主页的挂载组件中调用Echo包装器来显示所有在线用户,它工作并显示他们,现在的问题是,如果我转到另一个页面(通过Vue路由器),然后返回到主页,它不会显示在线用户的列表.除了手动我再次刷新页面。下面是我的代码片段:
mounted () {
// alert('Shoud work')
// console.log(Echo)
Echo.join('online')
.here((users) => {
alert(JSON.stringify(users))
this.users = users
})
.joining((user) => {
this.users.push(user)
})
.leaving((user) => {
this.users = this.users.filter(u => (u.id !== user.id));
})
}
}发布于 2018-12-11 02:50:28
尝试使用组件destroyed方法离开通道。因为您从未离开过通道,因此一旦返回,问题可能是Echo.join不会再次加载,因为用户已经在通道上了,因此不会触发负责用聊天用户数组加载组件users属性的.here。
mounted () {
Echo.join('online')
.here(users => {
this.users = users
})
.joining(user => {
this.users.push(user)
})
.leaving(user => {
this.users = this.users.filter(u => (u.id !== user.id));
})
},
destroyed() {
Echo.leave(user => {
this.users = this.users.filter(u => (u.id !== user.id));
});
}或
mounted () {
Echo.join('online')
.here(users => {
this.users = users
})
.joining(user => {
this.users.push(user)
})
.leaving(user => {
this.removeUser()
})
},
destroyed() {
Echo.leave(user => {
this.removeUser()
});
},
methods: {
removeUser(user) {
this.users = this.users.filter(u => (u.id !== user.id))
// Any other reusable code...
}
}更新:
如果您打算让用户在应用程序中“登录”,一种方法就是创建一个“会话”组件。这个组件可以或者不能有一个模板,但是,它需要在每个页面上保持加载。若要访问此会话组件之外的用户列表,可以将用户数据存储到浏览器的本地存储区,使用全局变量(ex )。( window.session.users),或者,如果可用,可以使用Vuex。无论哪种方式,只要用户数组可供其他组件使用,会话组件将在用户离开或加入应用程序(或聊天.或者您在那里实现的任何联接/离开规则)。
例如,假设您创建了一个名为session的组件。您可以使用<session></session>轻松地将其放在顶部导航组件模板中。由于会话组件自己的模板是空的,它不会影响顶部导航。但是,它将被呈现,允许您管理用户的联机状态。
https://stackoverflow.com/questions/53693368
复制相似问题