如何访问vuex存储模块中的嵌套动作?

时间:2018-11-19 16:15:39

标签: vue.js vuex

使用ApiPlatform创建一个项目并使用VueJs code generator生成一些代码后,我无法分派一些操作...这是示例:

  

主存储文件

export default new Vuex.Store({
    modules: {
        ...
        producto,
        ...
    }
})
  

主要产品商店文件

export default {
  namespaced: true,
  modules: {
    list, //here is the action I want to use
    create,
    update,
    show,
    del
  }
}
  

主要产品/列表存储文件

import * as actions from './actions'
import * as getters from './getters'
import mutations from './mutations'
export default {
  namespaced: true,
  state: {
    error: '',
    isLoading: false,
    items: [],
    view: []
  },
  actions,
  getters,
  mutations
}
  

动作文件

const getItems = ({ commit }, page = '/productos') => {
  commit(types.TOGGLE_LOADING)

  fetch(page)
    .then(response => response.json())
    .then((data) => {
      commit(types.TOGGLE_LOADING)
      commit(types.SET_ITEMS, data['hydra:member'])
      commit(types.SET_VIEW, data['hydra:view'])
    })
    .catch((e) => {
      commit(types.TOGGLE_LOADING)
      commit(types.SET_ERROR, e.message)
    })
}

export default getItems

在一个组件中,我映射了producto商店中的商品的吸气剂,并且得到了一个空数组(按预期)。但是当我打电话给this.$store.dispatch('producto/list/getItems')时,vuex会抛出错误,因为没有这样的getItems操作。

我不知道吸气剂为什么起作用,但动作却不起作用。

有提示吗?我需要调用该操作才能填充producto商店中的items数组。

预先感谢

1 个答案:

答案 0 :(得分:0)

我认为您可能在主要商店和产品商店都需要namespaced: true

export default new Vuex.Store({
  namespaced: true,
  modules: {
    ...
    producto,
    ...
  }
})

因为this.$store.dispatch('producto/list/getItems')中实际上有两个命名空间。