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

标签 javascript callback vue.js superagent emit

我的问题就像这个: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/

相关文章:

javascript - jquery fade div颜色改变

javascript - 存储日期和此日期 - 使用 d3.js 3 天

android - 将按钮 onClick 传递回主要 Activity 的最佳方式?

java - Java中的回调函数

javascript - 将数据从服务器端 Nodejs 发送到客户端(不在套接字上)

javascript - 脚本完成后,对 chrome 扩展中的弹出窗口或选项卡的 DOM 修改会立即撤消

javascript - 如何从 AWS Lambda node.js 异步函数返回数据?

javascript - Webpack - 代码分割 : split library into it's own file

javascript - Google Drive & vuejs3 - 将文件上传到特定文件夹

javascript - vue js 组件中的 this.$route 只返回 undefined