【发布时间】:2017-10-26 15:14:18
【问题描述】:
我在子组件中有一个方法,它负责从服务器获取数据,在接收到数据后,我试图将数据发送给父组件。下面的方法来自 Vue.component (child)。问题是,父组件无法接收发出的数据。只是为了检查,我将 $emit 代码移到了 axios 请求调用之外,然后它就可以工作了。如果我从 axios 内部 $emit,它就不起作用。
不工作(从 axios 内部发出):
methods:{
methodName: function(){
let self = this;
axios.get('url')
.then(function(response){
if (response.data.res) {
console.log('response is true, i can see this message');
self.$emit('updateparentdata',response.data);
}
});
self.$emit('close');
}
},
工作(从外部 axios 发出):
methods:{
methodName: function(){
let self = this;
self.$emit('updateparentdata','some dummy data');
axios.get('url')
.then(function(response){
if (response.data.res) {
}
});
self.$emit('close');
}
},
这是我的 html 页面中的组件代码,如果从 updateparentdata 发出某些内容,那么它将调用父 vue 中的“updateData”函数。
<modal
v-if="showModal"
@close="showModal = false"
v-on:updateparentdata="updateData">
</modal>
这是我在父级vue中的方法,
updateData: function(response){
console.log(response);
},
在我从子组件发出数据后,不会触发此方法。如果我在 axios 外部发出数据,则调用此方法,但如果我从 axios 内部发出数据,则不调用此方法。
【问题讨论】:
-
你确定
response.data.res是true? -
是的,我用 console.log 消息检查了它。 response.data.res 是真的。我用 console.log 语句修改了我的代码,你能检查一下吗? @thanksd
-
我无法重现您的问题。看到这个小提琴:jsfiddle.net/nxcne6zr
-
我找出了问题所在,并在下面提供了修复。感谢您的贡献。 @thanksd
标签: javascript vuejs2 vue-component axios