Vue-Router 之 3 动态路由
动态路由实现方式
前端控制
- 不用后端帮助,路由表维护在前端
- 逻辑相对比较简单,比较容易上手
后端控制
- 相对更安全一点
- 路由表维护在数据库
一、前端控制
思路:在路由配置里,通过meta
属性,扩展权限相关的字段,在路由守卫里通过判断这个权限标识,实现路由的动态增加,及页面跳转;如:我们增加一个role
字段来控制角色
具体方案:
- 根据登录用户的账号,返回前端用户的角色
- 前端根据用户的角色,跟路由表的
meta.role
进行匹配 - 讲匹配到的路由形成可访问路由
核心代码逻辑
1、在 router.js
文件(把静态路由和动态路由分别写在 router.js
)
1 |
|
2、store/permission.js(在vuex维护一个state,通过配角色来控制菜单显不显示)
1 |
|
3、src/permission.js
(新建一个路由守卫函数,可以在main.js,也可以抽离出来一个文件)
这里面的代码主要是控制路由跳转之前,先查一下有哪些可访问的路由,登录以后跳转的逻辑可以在这个地方写
1 |
|
4、侧边栏的可以从vuex里面取数据来进行渲染
核心代码是从router
取可以用的路由对象,来进行侧边栏的渲染,不管是前端动态加载还是后端动态加载路由,这个代码都是一样的
1 |
|
前端控制路由,逻辑相对简单,后端只需要存这个用户的角色就可以了,前端拿用户的角色进行匹配。但是如果新增角色,就会非常痛苦,每一个都要加。
二、后端控制路由
后端控制大致思路是:路由配置放在数据库表里,用户登录成功后,根据角色权限,把有权限的菜单传给前端,前端格式化成页面路由识别的结构,再渲染到页面菜单上;
- 用户登录以后,后端根据该用户的角色,直接生成可访问的路由数据,注意这个地方是数据
- 前端根据后端返回的路由数据,转成自己需要的路由结构
具体逻辑:
router.js
里面只放一些静态的路由,login
、404之类- 整理一份数据结构,存到表里
- 从后端获取路由数据,写一个数据转换的方法,讲数据转成可访问的路由
- 也是维护一个
vuex
状态,将转换好的路由存到vuex
里面 - 侧边栏也是从路由取数据进行渲染
因为前段控制和后端控制,后面的流程大部分都是一样的,所以这个地方只看看前面不一样的流程:
1、store/permission.js,在vuex里面发送请求获取数据
1 |
|
2、整理一份数据结构,存到表里
1 |
|
3、写一个转化方法,把获取到的数据转换成router结构
1 |
|
Vue-Router 之 3 动态路由
https://flepeng.github.io/021-frontend-04-Vue-Vue-Router-之-3-动态路由/