Задать вопрос

Как выйти из канала вещания laravel + Vue?

где делаю не так?

при выборе диалога, я подписываюсь на канал chat.{id dialoga}

переписка идет, вещание работает
5e33fb1d028b7793643187.png
5e33fb248d589074430084.png

но когда я перехожу на вкладку избранные диалоги, метод dialogsFavorites() то я выхожу из канала chat.{id предыдущего диалога} вызываю метод destroyChannel()

но сообщения приходят все ровно, даже когда диалог не выбран
5e33fb12da022723956796.png

export default {
    name: "Dialogs",
    created(){
    },
    watch: {
    },
    computed: {
        channel(){
            return  window.Echo.private('chat.' + this.dialogSelect);
        },
    },
    mounted() {
        this.User();
        this.Dialogs();
    },
    methods: {
        addChanel(){
            console.log('chat.' + this.dialogSelect);
            if (this.dialogSelect > 0){

                this.channel
                    .listen('DialogMessage',({data}) => {
                        this.messages.push(data);
                        this.isTyping = false;
                    })
                    .listenForWhisper('typing', (e) => {
                        console.log(e);
                        this.isTyping = e;

                        if (this.typingTimer) clearTimeout(this.typingTimer);

                        this.typingTimer = setTimeout(() => {
                            this.isTyping = false;
                        }, 2000);
                    });
            }

        },
        sendMessage(){
            axios.post('/profile/dialogs/send',{
                message:this.message,
                chat_id: this.dialogSelect,
                user_id: this.userSelect.id,
                type: 1
            })
                .then((response) => {
                    this.message = '';
                })
                .catch(error => {});
        },
        destroyChannel(){
            window.Echo.leaveChannel('chat.' + this.dialogSelect);
        },
        selectUser(id,user,x,avatar, fullname){
          this.destroyChannel();
          this.dialogSelect  = id;
          this.userSelect.id  = user;
          this.userSelect.avatar  = avatar;
          this.userSelect.fullname  = fullname;
          this.dialogIndex  = x;

            this.addChanel();

            axios.post('/profile/dialogs/messages',{
                dialog_id: id,
                offset: this.offset,
                limit: this.limit
            })
                .then((response) => {
                    this.messages = response.data.messages;
                    this.dialog.like = response.data.like;
                    this.dialog.favorite = response.data.favorite;
                    this.dialog.ignore = response.data.ignore;
                })
                .catch(error => {});
        },
        dialogFavorites(){
            this.destroyChannel();
            this.dialogNone();
            axios.get('/profile/dialogs/favorites')
                .then((response) => {
                    this.dialogs = response.data;
                    this.activeFilter = 'f';
                })
                .catch(error => {});
        },
    }
}
  • Вопрос задан
  • 479 просмотров
Подписаться 4 Простой 1 комментарий
Решения вопроса 1
@ettychel
Максим, я вам писал уже, посмотрите в документацию, там же написано на счёт приватных каналов, что следует использовать не .leaveChannel(), а .leave() тогда произойдёт полная отписка от любого вещания.
Если вы хотите покинуть канал, а также связанные с ним частные каналы и каналы присутствия, вы можете вызвать метод выхода:
Echo.leave('orders');

Также попробуйте посмотреть от чего отписывает вас метод
destroyChannel(){
    console.log('chat.' + this.dialogSelect)
    window.Echo.leaveChannel('chat.' + this.dialogSelect);
},
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы