addRoutes简介

用动态路由实现权限控制,是一个很nice的方案不是么? 初始路由只有登录页,根据用户的id查询对应的权限,然后addRoutes,将获取到的菜单数据放入vuex和浏览器缓存中。

动态添加更多的路由规则。参数必须是一个符合 routes 选项要求的数组

实现方案

这里的routers其实就是代表将来存放菜单权限的js,即vuex中一个state

// 初始路由文件
import Vue from 'vue'
import Router from 'vue-router'
import routers from './router'
Vue.use(Router)const index = () => import('@/views/index/index')export default new Router({routes: [{ path: '/', component: index },...routers]
})

addRoutes 方法使用

let router = [{path: '*', component: (resolve) => require(['@/views/addRoutes/404.vue'], resolve), name: '404', description: '这是addRoutes出来的404页面'},{path: '/foo', component: (resolve) => require(['@/views/addRoutes/foo.vue'], resolve), name: 'foo', description: '这是addRoutes出来的foo页面'}
]
// addRoutes
this.$router.addRoutes(router)

这样就完成了动态路由的添加,你可以试着在addRoutes后用this.$router.push({path: '你的路由地址'})去访问你新添加的路由元。

然而这样并没有结束,因为你把404页面渲染在了前面, 这样会导致在某些情况下你的foo路由会被渲染为404页面,因为路由先找到404页面。所以我们需要把404放在最下面。

let router = [{path: '/foo', component: (resolve) => require(['@/views/addRoutes/foo.vue'], resolve), name: 'foo', description: '这是addRoutes出来的foo页面'},{path: '*', component: (resolve) => require(['@/views/addRoutes/404.vue'], resolve), name: '404', description: '这是addRoutes出来的404页面'}
]

这个时候就到了找bug的时候了,我们发现在刷新浏览器之后,我们动态添加的路由规则竟然不见了,不要慌,这个时候就轮到vuex登场了,也就是最开始提到的将获取到的菜单数据放入vuex和浏览器缓存中。

解决方案: 将浏览器缓存中的菜单数据与vuex绑定起来,将vuex的数据与router实例绑定起来,当然,你也可以直接将浏览器缓存与router实例绑定起来,但是不建议这么做,毕竟浏览器缓存不是你可以控制的。这样就解决了刷新后丢失的bug了。

源码地址

另外放上新搭建的博客地址:http://blacklisten.cn

addRoutes爬坑记相关推荐

  1. 我在「小米爬坑记」里,看到的 3 个创业真相

    小米把10年的创业经历,做了一次「开源」. 就在昨晚,雷军做了小米十周年的公开演讲.在演讲中,雷军对小米10年的发展做了一次大梳理,既有成绩,也有反思,还有小米历史上一些非常关键的发展节点.其实上个月 ...

  2. 小小甜菜深度学习爬坑记

    小小甜菜深度学习爬坑记 主要目的是整理一路学习的技术分享贴.我的电脑是笔记本联想拯救者R720,显卡是GTX1050Ti.其它环境仅供参考. 安装ubuntu+win10双系统 详情见技术贴用 Eas ...

  3. Spring Cloud Contract 爬坑记

    前言:spring-cloud-starter-contract-verifier:2.1.1.RELEASE. spring-cloud-contract-maven-plugin:2.2.1.RE ...

  4. 小小甜菜百度AI爬坑记

    小小甜菜百度AI爬坑记 作为国内较好的深度学习平台,我是在2018百度开发者大会拉入坑的.其可分为语音识别,语音合成,文字识别,图像识别,人体分析,人脸识别,理解与互交技术,AR增强现实等多个方向.我 ...

  5. npm run build 打包爬坑记(1)

    npm run build 打包爬坑记 先说说打包过程,npm run build 后放入phpstudy里面,访问本地ip,查看phpstudy的端口号,就能访问页面了(访问地址:http://19 ...

  6. 小小甜菜keras爬坑记

    小小甜菜keras爬坑记 前言 安装(参考深度学习爬坑记安装ubuntu16.04+cuda9+cudnn+tensorflow1.9.0) 视频资料 相关模型资料 学习笔记 ssd模型 yolov3 ...

  7. 小小甜菜Movidius爬坑记

    小小甜菜Movidius爬坑记 我是在神经计算棒+树莓派3B上看到实际效果后决定使用本方案的,实际项目中使用树莓派CM3作为核心板卡,使用Movidius 2或Movidius X(具体版本看项目需求 ...

  8. 小白爬坑记:C语言学习点滴——我对单、双引号的理解

    小白爬坑记:C语言学习点滴--我对单.双引号的理解 一.单引号的作用: 二.双引号的作用: 三.字符或字符串容易犯的错误: 三.做个小题: 一.单引号的作用: 将单引号中间的所有符号直接转换为ASCI ...

  9. linux mono jexus性能,docker运行jexus+mono爬坑记,

    docker运行jexus+mono爬坑记, 新的.net core都已经支持docker.手头有一些原来开发的asp.net旧项目,用的asp.net mvc开发的,跑在.net formwork ...

最新文章

  1. html canvas抽奖,HTML5 Canvas圆盘抽奖应用(适用于Vue项目)
  2. Markdown大法的尝试
  3. 成功解决RuntimeWarning: divide by zero encountered in double_scalars
  4. SHADER 用 step替代 if-else
  5. Cython——[AttributeError: ‘MSVCCompiler‘ object has no attribute ‘compiler_so‘]解决方案
  6. php 数组 excel,PHPExcel文件如何导入成数组(选择指定的列)?
  7. imageJ 如何下载plugin_如何给微服务架构的项目做验收测试?
  8. 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...
  9. shl归纳推理测试题库_笔经总结含征服shl功略
  10. Louvain算法实现
  11. Oracle (08)JDBC
  12. SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
  13. 思考项目 求1+2的2次方+3的3次方+4的4次方+5的5次方+6的6次方的值。(异种循环嵌套)
  14. Swift 学习总结三:数组,字典,枚举,闭包, 函数
  15. 从互联网进化的角度看AI+时代的巨头竞争
  16. 最近瞎忙,比较懒撒,所以要收收心,该学习的学习。
  17. CVPR 2017论文集锦(论文分类)—— 附录部分翻译
  18. 1211: 8102 开关
  19. 移动互联网未来发展的五大趋势
  20. soup.find_all()用法

热门文章

  1. 例解 autoconf 和 automake 生成 Makefile 文件[转+个人修改]
  2. Android中TableLayout如何让列自动换行
  3. h5文字垂直居中_基于两款开源 h5 媒体编辑器定制一套海报系统
  4. 第12章[12.7] Ext JS实现带动态数字的图标
  5. 华为c语言中static的作用,C语言编程规范(华为、林锐、MISRAC).pdf
  6. ShardingSphere 语句解析生成初探
  7. java 祖父类_JAVA的XX.put中的put方法,是在哪个父类或祖父类中,详述父类链。
  8. PHP互评,大学英语: CBL自评互评(BS)
  9. Linix中Dockerfile部署Spring Boot项目
  10. Spring Boot整合Swagger3配置全局Token