如何在VueJS中发送后发出事件?

时间:2017-07-20 04:35:27

标签: vue.js vuejs2 vue-component vuex

我有一个带有行网格的父组件,我正在使用vuex传递数据,因为我添加了一条新记录,我想在模态窗口中打开新添加的记录。我发出一个事件并打开第一个记录(index = 0)的模态。问题是,因为它是使用vuex“action”添加记录的ajax调用,所以在添加记录之前发生了发射。我怎么能等到记录添加事件?或者有更好的方法吗?

以下是代码:

<!-- Grid Component -->
<grid>
   <addrow @newrecordadded="openNewlyAddedRecord"></addrow>
   <gridrow v-for="row in rows" :key="row._id"></gridrow>
</grid>

computed: {
    rows(){
       return this.$store.state.rows;
    }  
},
methods:{
    openNewlyAddedRecord(){
        this.openmodal(this.rows[0])
    }
}

我的store.js

state: {
    rows : []
}

所以在addrow组件中,一旦用户点击提交表单,它就会发送到vuex

methods:{
    onsubmit(){
        this.$store.dispatch('addrow',this.newrow);
        this.$emit("newrecordadded");    
    }
}

actions.js

addrow({ commit,state }, payload){
    var url = "/add";
    Axios.post(url,payload)
    .then(function(response){
        commit('addnewrow',response.data);
    });
}

mutations.js

addnewrow(state,payload){
    state.rows.unshift(payload);
}

或者我们可以通过回调函数来发送吗?

1 个答案:

答案 0 :(得分:3)

您可以让addrow操作返回一个承诺,如下所示:

addrow({ commit,state }, payload){
  var url = "/add";
  return Axios.post(url,payload)
    .then(function(response){
      commit('addnewrow',response.data);
    });
}

在组件的onsubmit方法中,您现在可以执行以下操作:

this.$store.dispatch('addrow',this.newrow).then(() => this.$emit("newrecordadded");)