Vue动态路由的实现(基于vue-cli3)
背景
最近又开始了一个新的项目,最近一直都在做项目的前期准备工作,借着这样的机会,我们来唠嗑唠嗑前端项目从0到1过程。今天我就先来说说前端动态路由和鉴权这块。大神勿喷。
前言
第一次看到动态路由是在研究vue-element-admin代码的时候。之前我接触的系统都是后台返回给前端一个路由表,然后前端直接渲染在页面上就可以了,但是看到了大佬的代码后,感觉这种思路很好,毕竟现在前后端的分离了,路由和权限这些信息应该由前端来处理。所以我第一次尝试了前端动态鉴权。虽然逻辑有点复杂,但是最终我还是实现了。
实现思路
- 每次路由跳转都判断用户是否登录,登录了才会进行后续操作,否则直接跳到登录页面
- 浏览器中已经保存了用户登录信息,但是请求进入的页面是登录页面,直接进入到首页,实现免登录的功能
- 判断vuex中是否存在路由配置信息,如果存在直接放行,否则进行下一步操作。
- 如果vuex中不存在路由配置信息,就需要去后台请求当前用户对应角色的权限信息,根据权限信息生成可访问的路由表,并存储在vuex中。
- 合并路由,将初始路由和生成的动态路由进行拼接。
实现
- 在router.js中定义两份路由,一份是初始路由,另一份是系统功能路由,需要动态加载
基础路由:
1 | /* |
系统功能路由(截取部分):
1 | /* |
- permission.js
1 | // 路由守卫 |
以上代码是动态路由实现的核心代码,主要是使用了vue-router提供的两个钩子函数,代码逻辑判断比较多,极易出现路由循环跳转从而引起爆栈问题。所以在写的时候一定要注意。
下面我们再来看看vuex中核心的构造路由表的代码
1 | import { |
以上就是动态路由的核心代码,当然如果你看到这儿还是一脸懵逼,你可以去我的github看看,哪里我已经准备好了一个完整demo vue-config-web,欢迎star。
本文完