1.在src目录下新建一个store文件夹,在此文件夹下新建一个index.js文件
import Vue from 'vue'
import Vuex from 'vuex'
import chanNum from "./chanNum";
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
chanNum
}
})
2.在store文件夹下新建一个你所需要的大模块(我这里取名为chanNum)
export default {
namespaced: true,
state:{
num: 222,
},
getters: {
dbNum(state) {
return state.num * 2
},
},
mutations: {
chanNum(state,payload) {
state.num += payload
}
},
actions: {
asyncChanNum(context,payload){
setTimeout(() => {
context.commit('chanNum',payload)
}, 1000);
}
},
modules: {},
};
3.在main.js中引入和挂载
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
4.在相应的组件中使用
<template>
<div>
{{$store.state.chanNum.num}} <br>
{{num}} <br>
{{dbNum}}
<hr>
<h1>方法点击实现</h1>
<button @click="chanNum(10)">给我点</button>
<button @click="asyncChanNum(100)">给我异步点</button>
</div>
</template>
<script>
import { mapState,mapGetters,mapMutations,mapActions } from "vuex";
export default {
data () {
return {
}
},
methods: {
...mapMutations({
chanNum:'chanNum/chanNum'
}),
...mapActions({
asyncChanNum:'chanNum/asyncChanNum'
})
},
computed: {
...mapState({
num:state=>state.chanNum.num
}),
// 模块化 获取getter
...mapGetters({
dbNum:'chanNum/dbNum',//这就是你所定义的文件夹的名称
})
}
}
</script>
5.到这里其实就已经结束,但是假如模块内的内容过多,我们还可以在细分
export default {
num: 222,
};
5.1然后在chanNum文件夹的index.js中引入(其他模块照旧)
import state from "./state.js";
export default {
namespaced: true,
state,
};