【问题标题】:Vuex access modules in subdirectoriesVuex 访问子目录中的模块
【发布时间】:2021-03-10 04:20:53
【问题描述】:

我的目录结构如下:

  • 商店
    • 模块
      • file1.js
      • file2.js
      • file3.js
      • 另一个文件夹
        • filex1.js

我的问题是,如何访问 anotherFolder/filex1.js 的状态 我可以设置值,但我无法获取它。

this.$store.dispatch('anotherFolder/filex1/myAction', {}) //work

let val = this.$store.state.anotherFolder.filex1.myValue //not work

我正在按如下方式导入模块。

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'

Vue.use(Vuex)
const modulesFiles = require.context('./modules', true, /\.js$/)
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const value = modulesFiles(modulePath)
  modules[moduleName] = value.default
  return modules
}, {})

const store = new Vuex.Store({
  modules,
  getters
})

export default store

我的文件x1.js

export default {
    namespaced: true,
    state: {
      myValue: {}
    },
    actions: {
      myAction({ commit }, reg) {
        commit('MY_ACTION', reg)
      }
    },
    mutations: {
      MY_ACTION(state, reg) {
        state.myValue = reg
      }
    }
  }
  

我想在子目录中组织商店的文件,所以我没有模块文件夹中的所有内容。 谢谢!

【问题讨论】:

  • 你能从商店索引中显示console.log(modules) 的输出吗?
  • 为什么在 Vuex 根目录而不是每个模块中都有 getter?在每个模块中创建 getter,然后在组件中使用 mapGetters

标签: vue.js vuex vuex-modules


【解决方案1】:

您可以在组件中使用 vuex 提供的绑定助手来访问嵌套模块中的状态:

computed: {
  ...mapState({
    a: state => state.some.nested.module.a,
    b: state => state.some.nested.module.b
  })

}

见: https://vuex.vuejs.org/guide/modules.html#namespacing

【讨论】:

  • 我必须添加模块路径 mapState('dir/subdir/subdir'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 2018-04-25
相关资源
最近更新 更多