关于vuejs中 vuex的, mapGetters 展开方法如果遇到重名时

vuex, store中的两个模块中的 。有相同的方法时。 又要在一个页面调用,同时用展开时就会出问题。

  1.  a 模块中的   getName()
  2.  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数据')

 

发表评论