博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
addRoutes爬坑记
阅读量:5979 次
发布时间:2019-06-20

本文共 1495 字,大约阅读时间需要 4 分钟。

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页面'  }]// addRoutesthis.$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://iroox.baihongyu.com/

你可能感兴趣的文章
Struts2 自定义拦截器(方法拦截器)
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
Atitti 过程导向 vs 结果导向 attlax的策
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
.NET Core 之 MSBuild 介绍
查看>>
iOS:即时通讯之<了解篇 SocKet>
查看>>
@EnableTransactionManagement注解理解
查看>>
《JavaScript高级程序设计》读书笔记(十):本地对象Date
查看>>
linux中fork()函数详解
查看>>
从1G到5G,46年屏幕变迁下,富士康、苹果、三星、华为的浴火重生路 ...
查看>>
##II 第四单元##管理系统中的简单分区和文件系统
查看>>
用flash测试你的ircd
查看>>
白话红黑树系列之二——红黑树的构建
查看>>
客户的一张表中出现重复数据,而该列由唯一键约束,重复值如何产生的呢?...
查看>>
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
查看>>
OnePlus安装Kali-NetHunter
查看>>
[Oracle][DataGuard]Standby数据库文件有损坏时的处理方法
查看>>
JavaScript:Array 对象
查看>>
PDFCreator:一款免费,开源的PDF(Tiff,pcx,png,jpeg,bmp,PS,EPS)打印机(VB,GPL),并提供了COM接口,方便使用各种编程语言调用...
查看>>