vuex, store中的两个模块中的 。有相同的方法时。 又要在一个页面调用,同时用展开时就会出问题。
- a 模块中的 getName()
- b 模块中的 getName()
// mapGeter 直接获得全局注册的getters
…mapGetters(“a”,[“localJobTitle”]),
…mapGetters(“b”,[“localJobTitle”]),
只能输出最后一次调用的。 即B的结果, 要是能指定别名就好了。
解决方式:
…mapGetters(“shopcar”,{ othershopcar:’localJobTitle’} )
如上面的方试调用, 即可解决。
或者: 写成传统方式:
localJobTitle1() {
return this.$store.getters[“login/localJobTitle”]+ “self”
}
其它 备忘:
// 和没有modules的时候一样,同样的方式dispatch action
changeName() {
this.$store.dispatch(“login/changeEagle”, “eagle11111”)
},
转载一个应用参考例子:
const moduleA = {
namespaced: true,
state: {
moduleAData: 'a'
},
getters:{
moduleAData: state => state.moduleAData,
},
mutations: {
SET_DATA_A: (state, payload) => {
state.moduleAData = payload
}
},
actions: {
setData({ commit }, payload) {
console.log('a')
commit('SET_DATA_A', payload)
}
}
}
const demoB = {
namespaced: true,
state: {
b: 'b'
},
getters:{
dataB: state => state.b,
},
mutations: {
SET_DATA_B: (state, payload) => {
state.b = payload
}
},
actions: {
setDatab({ commit }, payload) {
console.log('b')
commit('SET_DATA_B', payload)
},
someAction:{
// root:true,
handler({commit},payload){
commit('SET_DATA_B',payload)
}
}
}
}
export default new Vuex.Store({
modules:{
a: moduleA,
b:moduleB
}
})
使用
getter
...mapGetters('a',['moduleAData']),
...mapGetters('b',['moduleBData']),
或者
...mapGetters('a',{ss:'moduleAData'}),
...mapGetters('b',{bdata:'dataB'})
action
...mapActions(['a/setData','namespace/action']),
this['a/setData']('sdsds')
或者
this.$store.dispatch('a/setData','sdsds')
或者
...mapActions('a',{
'aaa':'setData'
}),
this.aaa('新的a数据')
或者
...mapActions('a',['setData']),
...mapActions('b',['setDatab']),
this.setData('新的a数据')
