如何访问Vuex模块的getter和mutgers?

Joh*_*ore 36 vue.js vuex

我正在尝试切换到使用Vuex而不是我自己开发的商店对象,我必须说我没有像在Vue.js世界中那样清楚地找到文档.假设我有一个名为'products'的Vuex模块,它有自己的状态,突变,getter等.我如何在该模块中引用一个名为'clearWorking Data'的动作?文档提供了访问模块状态的示例:

__CODE__

但是我无法看到关于吸气剂,突变,动作等的任何信息.

Gki*_*kan 81

除了接受的答案,我想为你提供答案中缺少的吸气剂的工作范围.

调试存储
在任何情况下,您都可以调用console.log(this.$store)Store来调试.
如果这样做,您将看到getter在其名称中以名称空间为前缀. 在此输入图像描述

访问命名空间的getter
this.$store.getters['yourModuleName/someGetterMethod']

Dispatch命名空间
this.$store.dispatch('yourModuleName/doSomething')

结束语
关键是像Justin解释的文件系统那样处理命名空间.

编辑:找到一个很好的库来处理vuex商店
除了基本的知识,我想添加这个vuex库作为一个很好的补充,使用vuex商店有效和快速地工作.https://github.com/davestewart/vuex-pathify.
它看起来非常有趣并且非常关注您的配置,并且还允许您直接使用vuex处理2waybinding.

  • 因此,在添加命名空间= true之前我使用过`restore store.getters.individuals`的地方,现在我必须使用`return store.getters ['individual / individuals']`。谢谢您的补充回答。在此花费了半个小时,发现了0个访问命名空间的getter的示例,直到您在此处回答为止。 (5认同)
  • 访问命名空间的getter!是!谢谢!为什么?..为什么他们没有在文档中包含此内容?‍♂️ (2认同)

Jus*_*hur 24

在您的示例中,store.dispatch('products/clearWorkingData')您可以将动作/突变视为文件系统.模块越深入嵌套在树中越深.

所以你可以去,store.commit('first/second/third/method')如果你有一个三层深的树.

  • 喔好吧!这是否取决于设置`namespaced: true`? (2认同)

小智 17

作为已接受答案的另一个补充,如果您需要将参数传递给getter(例如,从store集合中获取特定商品),则需要按以下方式传递它:

this.$store.getters['yourModuleName/someGetterMethod'](myParam)
Run Code Online (Sandbox Code Playgroud)

我认为我不太喜欢这种表示法,但实际上是这样-至少目前是这样。


Har*_*val 16

试试这个方法!

getCounter(){
  return this.$store.getters['auth/getToken'];     
}
Run Code Online (Sandbox Code Playgroud)

auth是我的模块名称,getToken是我的吸气剂。


小智 12

使用 Vuex mapGetters 和 mapActions,你现在可以很容易地做到这一点。但我同意,它在文档中仍然不是很明显。

假设您的商店模块“products”有一个名为“mostPopular”的 getter 和一个名为“clearWorkingData”的操作:

<template>
 <div>
  <p>{{mostPopularProduct}}<p>
  <p><button @click="clearProductData">Clear data</button></p>
 </div>
</template>
<script>
import { mapGetters, mapActions } from "vuex";

export default {
 computed: mapGetters({
  mostPopularProduct: "products/mostPopular"
 }),
 methods: mapActions({
  clearProductData: "products/clearWorkingData"
 })
}
</script>
Run Code Online (Sandbox Code Playgroud)