Vuejs $ emit在回调时没有触发父函数

时间:2017-09-05 08:45:15

标签: javascript callback vue.js superagent emit

我的问题就像这样:Vuejs $emit doesn't fire on callback。 但我在我的项目中使用了superagent。这是我的代码:

//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事件不会在回调中触发?

1 个答案:

答案 0 :(得分:0)

好吧,我明白了。

<强>&#39; V-如果&#39;绑定在子组件上。

因为在我的项目中,在子组件中,还有另一个触发器&#39; close&#39;关闭这个子组件,它是在回调之外发出的,这导致了问题。

//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!
  }
}