文档结构
module 给了我们一种隔离vuex store 各个 state及相关api 的方法,让数据相关操作在复杂的项目场景可以更清晰,易追踪。
│
├── index.js
│
├── controla
│ └── index.js
│
└── controlb
└── index.js
index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import controla from './controla'
import controlb from './controlb'
export default new Vuex.Store({
modules: {
controla,
controlb
}
})
controla/b
const controla = {
// 当namespaced=true 时, vuex, 将会自动给各自module 添加访问路径名。 方便区分moduel
namespaced: true,
state: {
name: 'controla',
type: 'controla A'
},
mutations: {
updateNameByMutation(state, appendStr) {
state.name = state.name + " append Str: " + appendStr
}
},
actions: {
// 如果不使用命名空间, 那么view 指向actions 的该方法时,会执行所有与指定action名相同的函数(即:这里module A,B 中该action都会执行)
udpateNameByAction({
commit
}, appendStr) {
commit("updateNameByMutation", appendStr)
}
},
getters: {
getNameB(state) {
return state.name
}
}
}
export default controla
使用
- 第一个参数传的是 module 路径(就引入各个module的名称)名。 这种方式将只会在当前view中,导出指定模块下注册的 action 集合。
<template>
<div>
<h3>{{name }} </h3>
<h3>{{nameb }} </h3>
<button @click="changeCA">changeCA</button>
</div>
</template>
<script>
// @ is an alias to /src
import {mapState,mapMutations} from 'vuex'
export default {
name: "Home",
components: {
},
data() {
return { };
},
computed:{
...mapState('controla',{name:state=>state.name})
, ...mapState('controlb',{nameb:state=>state.name})
},
methods: {
...mapMutations('controla',['updateNameByMutation']),
changeCA(){
this.updateNameByMutation('hello World')
}
},
};
</script>
<style scoped>
</style>