从另一个动作中调用动作

时间:2017-08-23 20:44:01

标签: vue.js vuex

我的行动有以下设置:

Characters

我希望能够从另一个内部调用一个操作,因此在此示例中,我希望能够从get1: ({commit}) => { //things this.get2(); //this is my question! }, get2: ({commit}) => { //things }, 内调用get2()。这是可能的,如果是的话,我该怎么做?

5 个答案:

答案 0 :(得分:134)

您可以访问第一个参数中传递的对象中的dispatch方法:

get1: ({ commit, dispatch }) => {
  dispatch('get2');
},

documentation

中介绍了这一点

答案 1 :(得分:7)

可以通过第一个参数(上下文)访问 dispatch 方法:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2')
  }
}

但是,如果您使用命名空间,则需要指定一个选项:

export const actions = {
  get({ commit, dispatch }) {
    dispatch('action2', {}, { root: true })
  }
}

答案 2 :(得分:3)

用于不需要有效载荷的动作

actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        await context.dispatch('BEFORE');
    }
}

对于需要有效负载

的操作
actions: {
    BEFORE: async (context, payload) => {
    },
    AFTER: async (context, payload) => {
        var payload = {}//prepare payload
        await context.dispatch('BEFORE', payload);
    }
}

答案 3 :(得分:0)

export actions = {
  GET_DATA (context) {
     // do stuff
     context.dispatch('GET_MORE_DATA');
  },

  GET_MORE_DATA (context) {
    // do more stuff
  }
}

答案 4 :(得分:0)

我们也可以在调度时传递参数。

dispatch('fetchContacts', user.uid);