vue-router+vuex addRoutes实现路由动态加载及菜单动态加载 本篇文章主要介绍了使用vue-router+vuex的addRoutes方法实现路由动态加载及菜单动态加载的方法。这种方法可以实现在用户登录后,根据用户角色权限动态生成菜单和路由规则,实现了对菜单权限的粗粒度控制。 我们需要了解vue-router的实例是在new vue实例的时候加载的,且必须加载。这意味着,在登录之前,我们不知道用户的权限,因此无法确定路由规则。为了解决这个问题,我们可以使用vuex来实现路由规则与菜单的同步。 最初的思路是,在一开始,就把所有的路由规则加载,然后在登录的时候,取得权限路由,对比两个路由,通过修改权限字段来隐藏菜单。然而,这样做法存在一些问题,例如,如果在后台页面添加了新菜单规则,路由是按模块加载的不同的文件,这时对路由的文件进行新的读写,虽然可以解决问题,但是如果手动在浏览器地址上路由,依然可以访问。 因此,我们需要找到新的方法来解决这个问题。在vue-router 2.2.0以后,官方新增了addRoutes API,专门针对服务端渲染路由。这下问题就比较简单了。我们可以使用addRoutes方法来动态添加路由规则,实现了路由的动态加载。 下面是实现代码的示例: ```javascript let permission = JSON.parse(window.sessionStorage.getItem('permission')) if (permission) { store.commit(ADD_MENU, permission) router.addRoutes(store.state.menu.items) } ``` 在上面的代码中,我们首先获取了用户的权限,然后使用addRoutes方法来添加路由规则。这样,我们可以实现路由的动态加载。 另外,我们还需要在路由的全局钩子上做拦截,以确保用户只能访问自己权限范围内的路由。 ```javascript router.beforeEach((route, redirect, next) => { if (route.path === '/login') { window.sessionStorage.removeItem('user') window.sessionStorage.removeItem('permission') store.commit(ADD_MENU, []) } let user = JSON.parse(window.sessionStorage.getItem('user')) if (!user && route.path !== '/login') { next({ path: '/login' }) } else { if (route.name) { next() } else { next({ path: '/nofound' }) } } }) ``` 在上面的代码中,我们使用beforeEach钩子来拦截路由,如果用户没有登录或者没有权限,我们将其重定向到登录页面。 使用vue-router+vuex的addRoutes方法可以实现路由动态加载及菜单动态加载,实现了对菜单权限的粗粒度控制。

















- 一颗小陨石2020-12-01直接抄的不挂原文挂这让人下?

- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 暑假电子商务实践报告.docx
- 如何做好项目管理-精选.ppt
- (源码)基于Spring Boot和Spring Cloud的分布式谷粒商城系统.zip
- 算法的概念优质课.pptx
- 中传传媒经济学硕士影视项目管理方向就业状况好不好.doc
- 专题讲座资料(2021-2022年)单片机红外线防盗报警系统课程设计.doc
- 合作开发贷款管理软件协议书.docx
- 项目管理项目变更控制表样本.doc
- Comsol锂离子电池仿真:方形电池充放电循环热仿真与流热耦合多物理场分析
- 鲁班软件安装消防培训.ppt
- 卫星图像处理流程.docx
- 某工程精装修项目管理成品保护控制标准.docx
- 霍尼韦尔智能家居系统的几大优势.pdf
- 深度学习-卷积神经网络算法简介.pdf
- 计算机大学生个人实习报告三篇范文.docx
- Android项目开发实训项目总结报告新.doc


