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 相关文章推荐
JavaScript/jQuery 表单美化插件小结
Feb 14 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
jQuery.event兼容各浏览器的event详细解析
Dec 18 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
Bootstrap table使用方法详细介绍
Dec 09 Javascript
图文介绍Vue父组件向子组件传值
Feb 17 Javascript
使用js实现一个简单的滚动条过程解析
Sep 10 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
vue各种事件监听实例(小结)
Jun 24 Javascript
vue实现lodop打印功能的示例
Nov 11 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
html中select语句读取mysql表中内容
2006/10/09 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
超清晰的document对象详解
2007/02/27 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
[57:37]EG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python处理PHP数组文本文件实例
2014/09/18 Python
python中执行shell的两种方法总结
2017/01/10 Python
Scrapy的简单使用教程
2017/10/24 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
毕业生求职推荐信
2013/11/04 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
赤壁观后感(2)
2015/06/15 职场文书
Python超简单容易上手的画图工具库推荐
2021/05/10 Python
浅谈Python 中的复数问题
2021/05/19 Python
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
欧元符号 €
2022/02/17 杂记