这篇文章主要介绍了vuex中modules的基本用法。
1. store文件结构
1 2 3 4 5 6 7
| - src - components - store -index.js -modules -app.js -bus.js
|
2.1index.js
中-手动引入modules
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import Vue from 'vue' import Vuex from 'vuex'
import bus from './module/bus' import app from './module/app'
Vue.use(Vuex) export default new Vuex.Store({ state: { }, mutations: { }, actions: { }, modules: { namespaced: true, app, bus } })
|
2.2 index.js
中-动态引入modules
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import Vue from 'vue' import Vuex from 'vuex'
Vue.use(Vuex)
const dynamicModules = {} const files = require.context('.', true, /\.js$/)
const dynamicImportModules = (modules, file, splits, index = 0) => { if (index == 0 && splits[0] == 'modules') { ++index } if (splits.length == index + 1) { if ('index' == splits[index]) { modules[splits[index - 1]] = files(file).default } else { modules.modules[splits[index]] = files(file).default } } else { let tmpModules = {} if ('index' == splits[index + 1]) { tmpModules = modules } else { modules[splits[index]] = modules[splits[index]] ? modules[splits[index]] : {namespaced: true, modules: {}} tmpModules = modules[splits[index]] } dynamicImportModules(tmpModules, file, splits, ++index) } }
files.keys().filter(file => file != './index.js').forEach(file => { let splits = file.replace(/(\.\/|\.js)/g, '').split('\/'); dynamicImportModules(dynamicModules, file, splits) })
export default new Vuex.Store({ modules: dynamicModules, strict: process.env.NODE_ENV !== 'production' })
|
3 app.js
文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const state = { user: {}, }
const mutations = { setUser (state, val) { state.user = val } } const getters = {} const actions = {}
export default { namespaced: true, state, mutations, getters, actions }
|
4.1 使用 a.vue
页面
1 2 3 4 5 6
|
this.$store.commit("app/setUser", user)
this.$store.state.app.user
|
4.2 utils.js
中使用
1 2 3 4 5 6 7 8 9 10 11 12
| import store from '@/store'
export const setCurUser = (user) => { let curUser = store.app.user if(!curUser) { store.commit("app/setUser", user) return user } return curUser }
|
5 配置main.js
1 2 3 4 5 6 7 8 9 10 11
| import Vue from 'vue' import App from './App' import router from './router' import store from './store'
new Vue({ el: '#app', router, store, render: h => h(App) })
|