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 相关文章推荐
图片自动更新(说明)
Oct 02 Javascript
jquery 事件对象属性小结
Apr 27 Javascript
js取消单选按钮选中示例代码
Nov 14 Javascript
js网页右下角提示框实例
Oct 14 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
Dec 22 Javascript
jQuery实现 RadioButton做必选校验功能
Jun 15 jQuery
对vux点击事件的优化详解
Aug 28 Javascript
Node.js Windows Binary二进制文件安装方法
May 16 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多文件上传实例
2015/07/09 PHP
PHP目录操作实例总结
2016/09/27 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
JS代码优化的8点建议
2020/02/04 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python2随机数列生成器简单实例
2017/09/04 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
Python中时间datetime的处理与转换用法总结
2019/02/18 Python
python协程之动态添加任务的方法
2019/02/19 Python
Django实现跨域请求过程详解
2019/07/25 Python
Django CBV类的用法详解
2019/07/26 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
利用python制作拼图小游戏的全过程
2020/12/04 Python
python中doctest库实例用法
2020/12/31 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
婚礼司仪主持词
2014/03/14 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
见习报告格式要求
2014/11/04 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
担保书格式范文
2015/09/22 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
SQL SERVER中的流程控制语句
2022/05/25 SQL Server