2017-03-05 165 views
5

我在我的vuex存储中有两个模块。从Vuex中的一个模块更改另一个模块状态

var store = new Vuex.Store({ 
    modules: { 
     loading: loading 
     posts: posts 
    } 
}); 

在模块loading,我有一个属性saving可以设置两种truefalse,也有变异函数命名TOGGLE_SAVING来设置该属性。

在模块posts中,在获取帖子之前和之后,我想要更改属性saving。我正在通过posts模块中的某个操作调用commit('TOGGLE_SAVING')来完成此操作。

var getPosts = function (context) { 
    contex.commit(TOGGLE_LOADING); 
}; 

当试图提交,我得到了以下错误控制台

[vuex] unknown local mutation type: TOGGLE_LOADING, global type: posts/TOGGLE_LOADING 

我如何使用commit另一个模块变异状态?

回答

4

与所建议here以下参数尝试;

commit('TOGGLE_SAVING', null, { root: true }) 

您可能必须将namespaced设置为true。

+0

太棒了。这很好。谢谢 –

+1

如果你使用模块和命名空间,不要忘记把命名空间添加到'commit',比如'commit('namespace/TOGGLE_SAVING',null,{root:true})',否则它不会工作。 – brainbag

1

您可以使用action来提交在另一个模块中定义的突变,然后您将在另一个模块中修改状态。

这样的:

posts: { 
    actions: { 
    toggleSavingActions(context) { 
     // some actions 
     context.commit("TOGGLE_SAVING"); // defined in loading module 
    } 
    } 
} 
+0

这就是我完成它的方式。我还在两个模块中设置了“namespace:true”。但是我得到'[vuex]未知的局部变异类型:TOGGLE_LOADING,全局类型:posts/TOGGLE_LOADING' –

+1

oh yes.by默认情况下,模块内的动作,变异和getter仍然在全局命名空间下注册。因此,您可以删除命名空间属性或使用提交('someMutation',null,{root:true}) – Julien

相关问题