2017-03-05 173 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

相關問題