this2. $ dispatch не является функцией - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь использовать функцию отправки в vue. js вот так. Но я получаю сообщение об ошибке 2. $ dispatch не является функцией ... как вы можете видеть на скриншоте

сообщение. vue

  export default {
    data(){
        return{
            message:'',
            isLoading:false,
        }
    },

    methods:{
        addMessage(){
            if(this.message !=''){
                this.sendData();
            } else{
                this.$fire({
                    title: "Error",
                    text: "Enter some text.",
                    type: "error",
                    timer: 3000
                }).then(r => {
                    console.log(r.value);
                });
                setTimeout(() => {
                    this.isLoading = false
                },700)
            }
        },
        sendData(){
            this.isLoading = true;
            this.$http.post('/add-message' , {message:this.message, id_rooms:this.$route.params.id_rooms}).then((response) => {
                console.log(response.json());
                if(response.body != 'Error'){
                    this.message = '';
                    this.$dispatch('new_message', response.json());
                } else{
                    this.isLoading = false;
                }
            }, (response) =>{

            });
        }
    }
}

, а затем я пытаюсь вывести его вот так

чат. vue

 export default {
        components:{
            get_message:getMessage,
            add_message:addMessage,
        },
        data(){
            return{
                messages:[]
            }

        },
        events:{
            'new_message':function(data){
                this.messages.push(data);
            }
        }

    }

Я столкнулся с этой ошибкой в ​​консоли .. . любые идеи, как я могу это решить?

enter image description here

1 Ответ

1 голос
/ 26 мая 2020

обновление

Если ваш магазин зарегистрирован с Vue, похоже, он должен работать. Если ваш $dispatch работает вне обещания, вы можете попробовать сохранить контекст this в другой переменной

sendData(){
    this.isLoading = true;
    const that = this;
    this.$http
        .post('/add-message' , {message:this.message, id_rooms:this.$route.params.id_rooms})
        .then((response) => {
            console.log(response.json());
            if(response.body != 'Error'){
                that.message = '';
                that.$dispatch('new_message', response.json());
            } else{
                that.isLoading = false;
            }
        }, (response) =>{

        });
}

или просто $dispatch

sendData(){
    this.isLoading = true;
    const $dispatch = this.$dispatch;
    this.$http
        .post('/add-message' , {message:this.message, id_rooms:this.$route.params.id_rooms})
        .then((response) => {
            console.log(response.json());
            if(response.body != 'Error'){
                this.message = '';
                $dispatch('new_message', response.json());
            } else{
                this.isLoading = false;
            }
        }, (response) =>{

        });
}

предположение здесь, но попробуйте вместо этого вызвать это

this.$store.dispatch('new_message', response.json());

в качестве альтернативы, ваша проблема может быть проблемой области (видя, что это вызывается из обещания)

, если у вас есть функция, объявленная как это в обработчике обещаний then(function(response){this.$store.dispatch('new_message', response.json());}) это может быть связано с областью действия

, вместо этого вы можете попробовать использовать стрелочную функцию

then((response) => {
  this.$store.dispatch('new_message', response.json());
})
...