2017-08-14 64 views
1

假設我們有這樣的事情:是否有可能使用vuejs2中的另一個模塊mutator來更改模塊中的狀態prop?

const moduleA = { 
    state: { name: 'Cristian' }, 
    namespaced: true, 
} 

const moduleB = { 
    state: { color: 'red' }, 
    namespaced: true, 
} 

const store = new Vuex.Store({ 
    state: { user: null, }, 
    modules: { 
    a: moduleA, 
    b: moduleB 
    }, 
    mutations: { 
    setPropValue(state, payload) { 
     for (let [key, value] of Object.entries(payload)) { 
     state[key] = value; 
     } 
    }, 
    }, 
}) 

在我VUE比如我有一個火力點觀測得到,當用戶登錄/退出,並相應地改變狀態。所以,我想達到什麼是這樣的:

const payload = { 
    module: 'root', 
    payload: { user, }, 
} 

this.$store.commit('setPropValue', {payload}); 

然後另一個模塊:

const payload = { 
    module: 'a', 
    payload: { name: 'Alexander', }, 
} 

並運行相同的邏輯,但不同的負載和模塊更換道具:

this.$store.commit('setPropValue', {payload}); 

回答

1

而是直接提交到突變的,可以考慮使用一個動作

this.$store.dispatch('setPropValue', { user }); 

然後在vuex,你的行動

actions: { 
    setPropValue({ commit }, { user }) { 
    commit("a/setName", user.name); 
    commit("b/setColor", user.favoriteColor); 
    } 
} 

每個模塊都需要自己的「本地」的突變,以修改模塊的狀態。

的細節

+0

但我仍然需要建立在這些模塊2層突變的功能,我想用從一個模塊一個突變的功能邏輯見https://vuex.vuejs.org/en/modules.html,通過它的配置對象,這取決於變異他人模塊狀態而不需要在其他模塊中複製該突變函數的邏輯.. – UnuSec

+0

模塊突變可以是超級簡單的...模塊A)setName:(state,name)=> state.name = name – Robodude

+0

是I知道:),我已經更新了我的初始Q,我認爲你弄錯了,它全部減少到:只使用模塊中的一個增變器邏輯來改變其他模塊狀態,而不需要複製它們中的邏輯。 – UnuSec

相關問題