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 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
jQuery实现简单倒计时功能的方法
Jul 04 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
原生JS实现层叠轮播图
May 17 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
Sep 28 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
javaScript实现游戏倒计时功能
Nov 17 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
vue 实现移动端键盘搜索事件监听
Nov 06 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中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
Laravel框架数据库CURD操作、连贯操作总结
2014/09/03 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
2011/06/20 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
深入解析Python中的__builtins__内建对象
2016/06/21 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
canvas实现俄罗斯方块的方法示例
2018/12/13 HTML / CSS
中国电视购物:快乐购
2017/02/04 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
审计专业自荐信范文
2014/04/21 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
长城导游词
2015/01/30 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python