使用Laravel回声和广播创建动态频道

时间:2017-09-14 18:38:42

标签: laravel vue.js laravel-echo

我正在尝试创建一个聊天,用户可以在其中创建1对1的对话甚至是对话组。我正在使用Laravel 5.5和Vue.js。

从我从文档中读到的内容可以加入与外卡的聊天:

Echo.join('chat.'{roomId})
        //.here()
        //.joining()
        //.leaving()
        .listen('MessagePosted', (e) => {
            //Some action
        });
});

并在routes/channels.php我应该使用

Broadcast::channel('chat.{roomId}', function ($user, $roomId) {
    //some form of authentication
});

但是我应该在哪里放置Echo功能?

我正在使用

创建Vue应用
const app = new Vue({
el: '#app',
data: {
    //Some arrays
},
methods: {
    //some methods
},
created() {
    //some axios functions to happen when it is created

    Echo.join('chatroom')
        //.here()
        //.joining()
        //.leaving()
        .listen('MessagePosted', (e) => {
            console.log(e);
            this.messages.push({
                message: e.message.message,
                user: e.user
            });
        });

}

});

正如您所看到的,我曾经创建了一个通用频道,其中使用#app创建的每个实例都会加入。但我想改变它只是加入某个频道。

1 个答案:

答案 0 :(得分:1)

比我想象的要容易。

刚创建的方法,只要我想更改频道,就会调用该方法,例如,不同的窗口聊天。将函数放在方法

showThread(thread) {
    Echo.leave(/*The last channel*/);
    Echo.join(/*New room*/)
        .listen('MessagePosted', (e) =>{/*actions*/}

不确定是否是最佳实践,不断调用它,但它的工作原理。如果有人发现这个并且有疑问或建议,我很乐意听到。