如何获取所有已注册的Vuex模块

问题描述 投票:0回答:2

有没有办法迭代所有Vuex模块?我像这样注册了我的命名空间模块:

$store.registerModule('module-xyz', module);

现在有什么方法可以获取所有这些的列表吗?

javascript vue.js vue-component vuex vuex-modules
2个回答
8
投票

它没有文档记录,但您可以通过

_modules
属性获取所有模块:

console.log(this.$store._modules.root._children);

您还可以使用

hasModule
:

检查模块是否存在
console.log(this.$store.hasModule('module-xyz'));

0
投票

如果您的商店模块是命名空间的,则模块名称将在您的商店状态中作为属性提供。因此,您可以对照

$store.hasModule()
检查这些属性以获取所有模块的列表。

示例:

Object.keys(this.$store.state).filter((stateKey) => this.$store.hasModule(stateKey))
// ['moduleA', 'moduleB']

如果您有嵌套模块并且需要表示嵌套的结构,则可以在检查模块时递归循环嵌套状态。

获取所有模块(包括嵌套)的示例:

function getStoreModules(store, state = store.state, parentModules = []) {
    return Object.keys(state)
        .filter((stateKey) => store.hasModule([...parentModules, stateKey]))
        .flatMap((moduleName) => {
            const modulePath = [...parentModules, moduleName];
            return [modulePath.join('/'), ...getStoreModules(store, state[moduleName], modulePath)];
        });
}
getStoreModules(this.$store);
// ['moduleA', 'moduleA/nestedModuleA', 'moduleB']
© www.soinside.com 2019 - 2024. All rights reserved.