2017-08-14 32 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

相关问题