模块
目录结构
一个模块目录结构如下
│ │ ├─ common // common模块
│ │ │ ├─ fragment // .vue片段片段目录
│ │ │ │ └─ *.vue // .vue片段文件,主要用于细化组件
│ │ │ ├─ view // 组件目录
│ │ │ │ └─ *.vue // .vue组件,一般是对应路由的component或者是完整的page
│ │ │ ├─ router.ts // 模块的router
│ │ │ └─ vuex.ts // 模块的vuex(store、action、mutations等)
增加一个模块
按照上面的目录结构建好相应的文件
配置好模块的路由
import { AsyncComponent } from 'vue' // 注意下面webpackChunkName后面的"public", 相同webpackChunkName的组件会被打包到同一个js文件里面 const Login: AsyncComponent = (): any => import(/* webpackChunkName: "public" */ './view/Login.vue') export default [ { path: '/login', name: 'login', component: Login, }, ]
编写模块的vuex代码
import { MutationTree, ActionTree, ActionContext } from 'vuex' import api from '../../global/api' const state: PublicState = { } const mutations: MutationTree<any> = { } const actions: ActionTree<any, any> = { // 用户登录 login(context: ActionContext<CommonState, State>, user: User): Promise<any> { return api.login(user) }, } export default {state, mutations, actions}
在全局router和全局store里面添加模块的router和vuex,如下面的system模块
import system from '../modules/system/router'
Vue.use(Router)
const router = new Router({
routes: [
...publicRouter,
{
path: '/',
component: MainLayout,
children: [
...common,
...system,
...demo,
],
},
{
path: '*',
redirect: '/',
},
],
})
export default router
import system from '../modules/system/vuex'
Vue.use(Vuex)
const modules: ModuleTree<any> = {
common, publicM, system,
}
export default new Vuex.Store({
state,
mutations,
actions,
modules,
})