在检查用户是否能够加入presentChannel之后,我希望数据$ user显示在我的页面上。我点击刷新后就会显示出来。我的问题是如何强制重新加载页面而无需手动上传(使POST请求通过)?
Broadcast::channel('online', function ($user) {
if(auth()->check())
return $user;
});
组件
<tbody>
<tr v-for="user in users" :key="user.id">
<td>{{user.name}}</td>
<td>{{user.ip}}</td>
</tr>
</tbody>
export default {
data() {
return {
users:[],
}
},
mounted() {
window.Echo.join('online')
.here(users => (this.users = users))
},
}
答案 0 :(得分:1)
感谢您发布代码。看来我们可以排除我在上面的评论中提到的PHP角度。我认为问题在于您没有在听新用户。
#加入在线渠道
https://laravel.com/docs/5.8/broadcasting#joining-presence-channels
此处回调将在频道成功加入后立即执行,并将接收一个包含当前订阅频道的所有其他用户的用户信息的数组。
对我来说,这表明here
方法仅在您的应用程序加入频道时才触发一次。为了接收新用户,您将需要订阅其他事件,并按收到的请求将新用户推送到用户数组(或从中删除用户)。
window.Echo.join('online')
.here((users) => {
// loads the initial data
this.users = users;
})
.joining((user) => {
// push a newly joining user to the users array
// ...
})
.leaving((user) => {
// delete a user who is leaving from the users array
// ...
});
我没有为其他方法编写任何特定的代码,因为您可能希望以特定的方式对用户进行排序,但是我认为您应该明白这一点。