我的问题就像这个:Vuejs $emit doesn't fire on callback . 但是我在我的项目中使用了 super 代理。这是我的代码:
//Parent.vue
<Child v-on:savevideo="toSaveVideo"/>
...
methods:{
toSaveVideo:function(data){
console.log('add');
}
}
//Child.vue
<button @click="toAdd">Add</button>
...
methods:{
toAdd:function(){
...
let self = this;
superagent
.get(url)
.query({data:data})
.end(function(err,res){
//trigger parent function
let resData = res.body.data;
self.$emit('savevideo',resData);
})
}
}
请求成功但是当触发'savevideo'时,父类中的'toSaveVideo'方法没有打印任何东西。但是,当我将 emit 放在回调之外时,一切都很好。 为什么 $emit 事件不在回调中触发?
最佳答案
好的,我想通了。
'v-if' 绑定(bind)在子组件上。
因为在我的项目中,在子组件中,有另一个触发器'close'关闭这个子组件,并且它是在回调之外发出的,这导致了问题。
//Parent.vue
<Child v-on:savevideo="toSaveVideo" v-if="showChild" v-on:close="toClose"/>
...
methods:{
toClose:function(){
this.showChild = false;
}
}
//Child.vue
<button @click="toAdd">Add</button>
...
methods:{
toAdd:function(){
...
let self = this;
superagent
.get(url)
.query({data:data})
.end(function(err,res){
//trigger parent function
let resData = res.body.data;
self.$emit('savevideo',resData);
//'close' should be emitted here!
})
this.$emit('close'); //bad code!! This cause the problem!
}
}
关于javascript - Vuejs $emit 没有在回调时触发父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46050695/