vue 解决addRoutes多次添加路由重复的操作


Posted in Javascript onAugust 04, 2020

我就废话不多说了,大家还是直接看代码吧~

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

const createRouter = () => new Router({
 mode: 'history',
 routes: []
})

const router = createRouter()

export function resetRouter () {
 const newRouter = createRouter()
 router.matcher = newRouter.matcher // the relevant part
}

export default router

找老外的文档解决的问题,在登出的模块调用resetRouter方法,把原来的路由替换。

补充知识:vue中 做权限管理 使用router.addRoutes()动态添加路由以及解决刷新失效,跳转后刷新失效问题

最近在公司做知识储备,有个权限的问题干扰了我2天,今天终于把他理顺了!!!

一、需求明确

我想做的是后台管理系统的权限管理,(所有的数据都是使用mockJs模拟得来),登录的时候,发送表单验证,验证成功后,后台返回权限列表,权限不同,返回的列表不同,拿到权限列表后,把权限列表渲染出来在页面侧边栏上。

二、注意点

(1) 前端提前设置静态的权限列表,通常只包括页面公共的部分,比如 login。

(2)前端提前定义所有的权限列表,将其定义为一个数组,该数组中包含所有的权限。

(3)后台返回的数据是该用户拥有的所有权限列表,一般写成路由形式,但只包含name即可,如:

{
  "code": 0,
  "message": "获取权限成功",
  "data": [
    {
      "name": "订单管理",
      "children": [
        {
          "name": "订单列表"
        },
        {
          "name": "生产管理",
          "children": [
            {
              "name": "生产列表"
            }           
          ]
        },
        {
          "name": "退货管理"
        }
      ]
    }
  ]
}

三、思路与实现

(1)当用户点击登录的时候,验证成功后,可以获取当前用户的id(token)存储到sessionStorage中。

(2)根据 '后台返回的权限列表(getList)',去比对 '我们提前定义好的权限列表(powerList)',然后得出 '应该动态添加的权限列表(list)' ,并存放到vuex中,最后执行addRoutes把比对出来的权限路由列表动态添加到路由中即可。

(3)进入home页面,渲染侧边栏。

四、问题

(1)vuex中数据存储在内存中,刷新后失效需要重新获取。因此会出现动态页面失效问题。我们需要根据是否为刷新页面来重新加载即可。

(2)进入动态加载的页面,然后再刷新,也会出现上面的情况

五、解决方法

在router的全局导航守卫beforeEach中设置,根据vuex中是否有list 来判断是否为刷新页面,如果有那么是第一次登陆, 如果没有,那么就为刷新页面,需要重新执行即可。

vue 解决addRoutes多次添加路由重复的操作

getRoutes就是执行路由对比,然后执行addRoutes的函数,因为其中有获取后台的路由列表这一步,为异步操作,所以应该放在action中

以上这篇vue 解决addRoutes多次添加路由重复的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
Sep 29 Javascript
HTML页面登录时的JS验证方法
May 28 Javascript
JS使用eval解析JSON的注意事项分析
Nov 14 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
Angularjs上传图片实例详解
Aug 06 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
Apr 26 jQuery
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 Javascript
vue 组件简介
Jul 31 Javascript
vue+springboot+element+vue-resource实现文件上传教程
Oct 21 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
Aug 04 #Javascript
Jquery cookie插件实现原理代码解析
Aug 04 #jQuery
解决vue自定义指令导致的内存泄漏问题
Aug 04 #Javascript
vue中的v-model原理,与组件自定义v-model详解
Aug 04 #Javascript
详解JS深拷贝与浅拷贝
Aug 04 #Javascript
vue addRoutes路由动态加载操作
Aug 04 #Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 #Javascript
You might like
php db类库进行数据库操作
2009/03/19 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
yii,CI,yaf框架+smarty模板使用方法
2015/12/29 PHP
php文件系统处理方法小结
2016/05/23 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
详解JS函数重载
2014/12/04 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
VC++笔试题
2014/10/13 面试题
《雕塑之美》教学反思
2014/04/24 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
快递员岗位职责
2014/09/12 职场文书
学校党员个人问题整改措施思想汇报
2014/10/08 职场文书
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL