项目中基于vue-element-admin
的多级路由配置,这里做一下记录
介绍
vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i18 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助你快速搭建企业级中后台产品原型。
链接地址: vue-element-admin
需求场景
二级路由无法完整且正确表达项目中所展示的内容信息,需要对信息进行进一步细化,使层次显示的更加清晰明了
目录结构
由于项目隐私,路由和组件的代码还是用官方例子作为参考,基本都是大同小异
- 路由结构
路由这块可以写一个modules文件夹,用于存放二级及以上的路由模块
image.png
三级路由结构 官方例子
这里写了一个nested 的三级路由结构,基于Layout 布局模块,添加了三个children
// nested.js
/** When your routing table is too long, you can split it into small modules **/
import Layout from '@/layout'
const nestedRouter = {
path: '/nested',
component: Layout,
redirect: '/nested/menu1/menu1-1',
name: 'Nested',
meta: {
title: 'Nested Routes',
icon: 'nested'
},
children: [
{
path: 'menu1',
component: () => import('@/views/nested/menu1/index'), // Parent router-view
name: 'Menu1',
meta: { title: 'Menu 1' },
redirect: '/nested/menu1/menu1-1',
children: [
{
path: 'menu1-1',
component: () => import('@/views/nested/menu1/menu1-1'),
name: 'Menu1-1',
meta: { title: 'Menu 1-1' }
},
{
path: 'menu1-2',
component: () => import('@/views/nested/menu1/menu1-2'),
name: 'Menu1-2',
redirect: '/nested/menu1/menu1-2/menu1-2-1',
meta: { title: 'Menu 1-2' },
children: [
{
path: 'menu1-2-1',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
name: 'Menu1-2-1',
meta: { title: 'Menu 1-2-1' }
},
{
path: 'menu1-2-2',
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
name: 'Menu1-2-2',
meta: { title: 'Menu 1-2-2' }
}
]
},
{
path: 'menu1-3',
component: () => import('@/views/nested/menu1/menu1-3'),
name: 'Menu1-3',
meta: { title: 'Menu 1-3' }
}
]
},
{
path: 'menu2',
name: 'Menu2',
component: () => import('@/views/nested/menu2/index'),
meta: { title: 'Menu 2' }
}
]
}
export default nestedRouter
然后将其导出,在routes.js里面导入,放到想要放的位置(页面的层次结构根据路由的顺序依次渲染)
// routes.js
import nestedRouter from './modules/nested'
...
/** when your routing map is too long, you can split it into small modules **/
nestedRouter
...
- 组件结构
组件的存放位置也要按照多级路由的嵌套规则来建文件夹
这里还是拿官方例子来看, 最外层是nested然后里面放了两个文件夹menu1 和 menu2
全部展开结果如下图
image.png
这里一级菜单menu1下面还有几个二级菜单menu1-1 、menu1-2和menu1-3,所以在menu1下面新建一个index.vue
, 在里面加上<router-view>
<template>
<div style="padding:30px;">
<el-alert :closable="false" title="menu 1">
<!-- 原则上有多少级路由嵌套就需要多少个<router-view> -->
<router-view />
</el-alert>
</div>
</template>
按照官方的解释,原则上有多少级路由嵌套就需要多少个<router-view>
所以当二级菜单menu1-2下面还有几个三级菜单menu1-2-1和menu1-2-2时,这时候就需要在menu1-2的index.vue
里面再添加<router-view>
<template>
<div style="padding:30px;">
<el-alert :closable="false" title="menu 1-2" type="success">
<!-- 原则上有多少级路由嵌套就需要多少个<router-view> -->
<router-view />
</el-alert>
</div>
</template>
然后自己的项目按照这种方式配置,就能实现多级目录(嵌套路由)了。
jiesen_s.jpg
网友评论