有没有办法在其动作或突变中获取 nameSpaced vuex 模块的名称?

Posted

技术标签:

【中文标题】有没有办法在其动作或突变中获取 nameSpaced vuex 模块的名称?【英文标题】:Is there a way to get the name of the nameSpaced vuex module inside its action or mutation? 【发布时间】:2019-08-26 02:34:29 【问题描述】:

我的应用程序中有多个带有 nameSpaced: true 的 vuex 模式。 在模块的动作或突变中,我想知道父模块的名称。

假设我有 2 个模块,'a' 和 'b',我将突变称为类似

this.$store.commit("a/setName", name);
this.$store.commit("b/setName", name);

现在在 setName 函数中,我想知道调用的 nameSpace 是什么? 是'a'还是'b'?

【问题讨论】:

【参考方案1】:

目前这对于vuex 来说仍然是一个未解决的问题,您可以在此处看到:Access module namespace from within module #1244。这个请求有很多解决方法,但我想根据您提供的代码向您展示一个简单的解决方法。

这个:

this.$store.commit("a/setName", name);
this.$store.commit("b/setName", name);

...可能是这样的:

this.$store.dispatch('a/setName', namespace: "a", data: name)
this.$store.dispatch('b/setName', namespace: "b", data: name)

是的,这意味着您需要手动应用您正在调用的命名空间的名称,但在您的示例中,您已经这样做了。在您的操作中,它可能是这样的:

setName(commit, object) 
        console.log(object.namespace); // submitted namespace
        commit('SET_THIS_NAME', object.data); // your data
    

请注意,这只是一种解决方法,因为仍然无法访问vuex 模块内的命名空间。因此,这不是官方方式,而是一种解决方法。

【讨论】:

以上是关于有没有办法在其动作或突变中获取 nameSpaced vuex 模块的名称?的主要内容,如果未能解决你的问题,请参考以下文章

既不是突变也不是查询的 Apollo/GraphQL 动作

有没有办法在没有参数的情况下在其函数中获取数组结构的索引?

如何在其包装组件之外重新获取查询?

如何在Vim上重复某些动作?

有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?

在 MVC3 中,如何获取当前的动作名称?