vue----webpack模板----vuex----modules子模块
modules模块
modules:模块
作用 将所有的数据进行模块的拆分 而不是放在一个store里面,拆分后有利于管理 注意在每个小模块导出的时候一定要加命名空间 namespaced=true 这样就不会出现命名冲突 如果想要调用小模块里面的方法 则需要加上小模块的名称 例如 handleAdd:"goodsStore/handleAdd"
子模块文件夹设置
store
index.js(主模块)
goodsStore(商品模块)
state.vue
actions.vue
mutations.vue
getters.vue
index.vue
总模块的设置store/index.js
import Vue from "vue"; import Vuex from "vuex"; //引入子仓库 import goodsStore from "./goodsStore"; Vue.use(Vuex); const state = { } const mutations = { } const actions = { } const getters = { } const store = new Vuex.Store({ state, mutations, actions, getters, modules:{ goodsStore } }) export default store;
子模块设置
goodsStore/state.js export default{ } goodsStore/mutations.js export default{ } goodsStore/actions.js export default{ } goodsStore/getters.js export default{ } goodsStore/index.js //导入 import state from "./state" import mutations from "./mutations" import actions from "./actions" import getters from "./getters" export default{ //独立的命名空间 namespaced:true, state, mutations, actions, getters }
组件中使用子模块中的state中的数据和actions中的方法
<template> <div class="home"> <h1>{{message}}</h1> </div> </template> <script> import Vuex from "vuex"; export default { data(){ return{ } }, watch:{ }, computed:{ ...Vuex.mapState({ inputVal1:state=>state.inputVal1, inputVal2:state=>state.inputVal2, //使用子模块中的数据 message:state=>state.goodsStore.message }), ...Vuex.mapGetters({ //不允许写函数 sum:"sum" }) }, methods:{ ...Vuex.mapActions({ handleChange:"handleChange", //使用小模块中的方法 handeleAdd:"goodsStore/handleAdd" }) } } </script> <style> </style>