赞
踩
这篇文章主要介绍了vuex中modules的基本用法。
- src
- components
- store
-index.js
-modules
-app.js
-bus.js
index.js
中-手动引入modulesimport 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: { // 这里是根vuex状态 }, mutations: { // 这里是根vuex状态 }, actions: { // 这里是根vuex状态 }, modules: { // 子vuex状态模块注册 namespaced: true, // 为了解决不同模块命名冲突的问题 app, bus } })
index.js
中-动态引入modulesimport 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' })
app.js
文件内容const state = { user: {}, // 需要管理的状态数据 } const mutations = { setUser (state, val) { state.user = val } } const getters = {} const actions = {} export default { namespaced: true, state, mutations, getters, actions }
a.vue
页面// 使用模块中的mutations、getters、actions时候,要加上模块名,例如使用commint执行mutations时
// 格式: 模块名/模块中的mutations
this.$store.commit("app/setUser", user)
// 获取属性时同样加上模块名
this.$store.state.app.user
utils.js
中使用// 引入 这里的store 就相当于页面中的 this.$store
import store from '@/store'
export const setCurUser = (user) => {
let curUser = store.app.user
if(!curUser) {
store.commit("app/setUser", user)
return user
}
return curUser
}
main.js
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)
})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。