如何在Vuex中同时使用非命名空间和命名空间模块

时间:2020-04-02 08:14:53

标签: vue.js vuex

我正在尝试一个由命名空间模块和全局状态组成的状态。不幸的是,我可以访问全局操作,但无法获取全局状态属性。

如果我尝试在这样的组件中使用mapState,

df1 = (df.loc[:, df.isna().any()]
         .xs('blue', axis=1, level=1)
         .stack([0,1])
         .reset_index(level=0, drop=True)
         .rename_axis(('word','number'))
         .reset_index(name='blue'))

print (df1)
  word number  blue
0  bar    one   2.0
1  baz    two   4.4
2  qux    one   1.0
3  bar    one   3.0
4  baz    two   5.0

我可以访问地址,但是editMode始终未定义。映射操作可以完美运行,并根据Vuex Chrome工具更新状态。

但是我注意到,全局状态显示在其自己的“命名空间”“ global”下。因此,我尝试使用... mapState('global',['editMode'])进行映射,但收到一个错误消息,即命名空间不存在。

这是我的代码:

index.ts

computed: {
  ...mapState(['editMode']),
  ...mapState('address', ['addresses']),
}

modules / address.ts

import Vue from 'vue';
import Vuex from 'vuex';
import address from './modules/address';
import global from './global';

Vue.use(Vuex);

export default new Vuex.Store({
  modules: {
    address,
    global,
  },
});

global.ts

export default {
  namespaced: true,

  state: {
    addresses: [],
  },

  mutations: {
    ...
  },

  actions: {
    ...
  },
};

1 个答案:

答案 0 :(得分:1)

状态不受namespace的影响。在某种程度上,它总是被命名空间。这样我们就不会发生碰撞。

要从模块访问状态,您需要详细说明:

computed: {
 ...mapState({
   editMode: state => state.global.editMode
 }),
 ...mapState('address', ['addresses']),
}