首页 > 解决方案 > 命名空间模块可以处理对根命名空间的突变吗?

问题描述

考虑以下场景。

我有两个命名空间模块:moduleAmoduleB. 它们都遵循类似的模式:

export default {
  namespaced: true,
  state: defaultState(),
  actions: {
    // ...
  },
  mutations: {
    [SET_DATA] (state, data) {
      state.data = data
    }
  }
}

然后我希望能够通过一个操作重置我的所有模块。我在根命名空间中提交了一个突变“APP_RESET”:

commit(APP_RESET, null, { root: true})

在这一点上,我会在我的每个模块中添加类似这样的内容:

[APP_RESET] (state) {
  Object.assign(state, defaultState())
}

但是,现在正在处理的突变是:

moduleA: moduleA/SET_DATA, moduleA/APP_RESET

moduleB: moduleB/SET_DATA, moduleB/APP_RESET

是否可以设置我的命名空间模块,以便它们可以处理以下内容?

moduleA: moduleA/SET_DATA, APP_RESET

moduleB: moduleB/SET_DATA, APP_RESET

标签: vue.jsvuejs2vuexvuex-modules

解决方案


我找到了我的答案。我没想到要在根命名空间上设置操作。例如

从非命名空间上下文:

dispatch(APP_RESET)

在我的每个模块中:

[APP_RESET]: {
    root: true,
    handler ({commit}) {
        commit(RESET_MODULE_A)
    }
}

从命名空间上下文:

dispatch(APP_RESET)

在我的每个模块中:

['namespaceOfDispatcherModule/' + APP_RESET]: {
    root: true,
    handler ({commit}) {
        commit(RESET_MODULE_A)
    }
}

推荐阅读