vue.js - 在 VueJS 中发送后如何发出事件?

标签 vue.js vuejs2 vue-component vuex

我有一个带有行网格的父组件,我正在使用 vuex 传递数据,因为我添加了一条新记录,我想在模式窗口中打开新添加的记录。我正在发出一个事件并使用第一条记录(索引 = 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])
    }
}

我的商店.js

state: {
    rows : []
}

所以在 addrow 组件中,一旦用户点击提交表单,它就会分派(dispatch)给 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);
}

或者我们可以传递一个回调函数来调度吗?

最佳答案

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

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");)

关于vue.js - 在 VueJS 中发送后如何发出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45205265/

相关文章:

javascript - 单击浏览器中的后退箭头时避免使用 GET 方法的 URL 参数

javascript - Bootstrap-Vue:将角色权限实现为多个 b-form-checkbox 数组,显示为 b-table 中的列。不工作

javascript - vue.js 组件内联样式串联

javascript - vue-router 不会在嵌套路由上渲染模板

visual-studio - 如何在Visual Studio 2017的ASP.net项目中使用Bootstrap-Vue?

javascript - 拉拉维尔 5 : Get the default value of my select option with onChange event using Vue js

vue.js - 为什么我的 Vue 子组件一开始已经将 prop 分配给 $data,但仍然意外地改变了父 $data?

css - 使用 Vue 仅在悬停时显示截断的文本

javascript - Vue.js 父子组件动态双向数据绑定(bind)

javascript - Vue.js 组件调用 data 属性内的方法