Vuex,具有命名空间的模块吸气剂在根吸气剂中不可用?

时间:2019-08-08 09:00:25

标签: javascript vue.js vuex getter

在根getter vuex中不可用命名空间模块的getter。

嗨,

我在根状态下有一个吸气剂,该吸气剂需要引用模块(过滤器)中的另一个吸气剂(getFilteredSpecialItems)。我知道rootGetters。我可以在vue组件中引用filter / getFilteredSpecialItems,到目前为止,它可以正常工作。

根状态

const getters: {
  getSortedList: (state, getters, rootState, rootGetters) {
    ...
      console.log(getters);
    console.log(rootGetters);
    console.log(getters.getFilteredSpecialItems);
    console.log(rootGetters.getFilteredSpecialItems);
    console.log(getters.filter.getFilteredSpecialItems);
    console.log(rootGetters.filter.getFilteredSpecialItems);
    ...
    }
}

过滤器模块

const state: {
  namespaced: true
  ...
}

const getters: {
  getFilteredSpecialItems: (state, getters, rootState) => {
    ....
  }
}

文件夹结构

store
| index.js
| getters.js
| mutations.js
| actions.js
| state.js
| filter (dir)
| \
| | index.js
| | getters.js
| | mutations.js
| | actions.js
| | state.js

getter和rootGetters都注册了过滤器模块(第一个{{1}和第二个console.log):

获取者 getters

rootGetters rootGetters

3。和4. console.logundefined,5和6.抛出错误,因为getters.filterrootGetters.filterundefined,因此它们没有任何属性。

如何将getFilteredSpecialItems放入根getSortedList吸气剂中?

我感谢任何形式的帮助或建议。谢谢。

1 个答案:

答案 0 :(得分:2)

您必须像这样访问命名空间的吸气剂:

rootGetters['filter/getFilteredSpecialItems']

不喜欢这样(不喜欢状态):

rootGetters.filter.getFilteredSpecialItems

从同一模块中的另一个吸气剂中,您应该能够做到

getters.getFilteredSpecialItems

如果它返回undefined,那么您的getter可能正在返回undefined?确认它实际上在被调用,请记住,如果自上次调用以来getter函数中没有可观察的数据发生变化,则可能会缓存其最后一个返回值。

相关问题