相关疑难解决方法(0)

Vuex:具有动态命名空间的 createNamespacedHelpers

在几乎所有关于 vuex 模块注册的指南、教程、帖子等中,如果模块由组件注册,则createNamespacedHelpersexport default组件语句之前导入和定义,例如:

import {createNamespacedHelpers} from 'vuex'
const {mapState} = createNamespacedHelpers('mymod')

import module from '@/store/modules/mymod'

export default {
  beforeCreated() {
    this.$store.registerModule('mymod', module)
  }
}
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但是如果我们希望模块具有唯一的或用户定义的命名空间怎么办?

import {createNamespacedHelpers} from 'vuex'
import module from '@/store/modules/mymod'

export default {
  props: { namespace: 'mymod' },
  beforeCreated() {
    const ns = this.$options.propData.namespace
    this.$store.registerModule(ns, module)
    const {mapState} = createNamespacedHelpers(ns)
    this.$options.computed = {
      ...mapState(['testVar'])
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为这会起作用,但它没有。

为什么需要这样的东西?因为

export default {
  ...
  computed: {
    ...mapState(this.namespace, ['testVar']), 
    ...
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

不起作用

vue.js vue-component vuex vuejs2 vuex-modules

6
推荐指数
1
解决办法
2897
查看次数

标签 统计

vue-component ×1

vue.js ×1

vuejs2 ×1

vuex ×1

vuex-modules ×1