vue 导航菜单刷新状态不消失,显示对应的路由界面操作


Posted in Javascript onAugust 06, 2020

使用vue element-ui框架构建公共导航栏(https://element.eleme.cn/#/zh-CN/component/menu)

按F5刷新就会返回默认定义的路由,使用 "$route.path" 刷新后还是在最新的一个路由:

<el-menu :default-active="$route.path"></el-menu>

vue 导航菜单刷新状态不消失,显示对应的路由界面操作

vue 导航菜单刷新状态不消失,显示对应的路由界面操作

补充知识:vue 动态菜单 刷新空白 解决方案

1.先确认自己在route.js 或者 main.js 中有没有使用 路由守卫vue.beforeEach和vue.addRouters() 促使页面每次刷新,重新根据后台返回数据生成动态路由,就像你在登陆时做的事情一样。

代码示范注意点:

//注意:确定自己避免了路由守卫进入死循环
let oneRun = true; //通过oneRun变量控制 避免陷入死循环
router.beforeEach((to,from,next)=>{
  if(oneRun){
    oneRun = false;//必须在creatNewRouter() 执行
    createNewRouter();
    next({...to, replace: true})// 必不可少的,确保你的动态路由创建成功再去执行其它代码
  }
})
 
function createNewRouter(){
  //请在这里做你登陆之后所做的创建动态路由的事情 一模一样去做。
  //不要用缓存,session或localstorage 否则会报错。你需要重新发出请求 登陆怎么做的 这里就怎么做的
};

2. 如果你发现刷新之后成功了但回退发生了问题 请把路由模式切换成 history vue-route 默认使用hash模式。也就是地址上出现眨眼的 /#/ 当然 history模式本体跑没问题 发包后 需要后端配置 后端配置指导链接 把链接复制发2给后端同学即可。

3. 如果你想了解更多

1.为什么 用了缓存会失败? 这是因为当你存入缓存时候用了JSON.stringify 这东西 会改变 compoent对象 让它少了一个 render函数。这里你可以打印出来你缓存之后 又解析 出来的路由 比对一下 而 addRouters()要求它接受的数组参数必须严格符合路由规则。

2.next({...to, replace: true}) 为什么必不可少呢? 在hash模式下 你的动态路由可能还没创建完成就 跑其它代码了 毕竟 路由守卫是异步操作 在history模式下 可能没有这个问题 未实测 写上最好。

3.每次刷新发请求拿路由不合适?

继续缓存,但从缓存取出来路由之后,复写路由里面所有的compoent对象。复写方法很多,如递归遍历路由。然后 item.compoent = vueName; vueName也就是你导出来的vue文件变量。

以上这篇vue 导航菜单刷新状态不消失,显示对应的路由界面操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
讨论javascript(一)工厂方式 js面象对象的定义方法
Dec 15 Javascript
Javascript根据指定下标或对象删除数组元素
Dec 21 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
Jan 27 Javascript
Javascript中call的两种用法实例
Dec 13 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
jQuery实现动画效果circle实例
Aug 06 Javascript
基于JS实现Android,iOS一个手势动画效果
Apr 27 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
bootstrap Table插件使用demo
Aug 07 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 #Javascript
Vue基于iview table展示图片实现点击放大
Aug 05 #Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 #Javascript
解决vue路由name同名,路由重复的问题
Aug 05 #Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
Aug 05 #Javascript
Vue 同步异步存值取值实现案例
Aug 05 #Javascript
详解vue路由
Aug 05 #Javascript
You might like
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
jQuery 使用手册(二)
2009/09/23 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python操作json的方法实例分析
2018/12/06 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Python socket服务常用操作代码实例
2020/06/22 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
英国领先的鞋类零售商和顶级品牌的官方零售商:Wynsors
2020/02/17 全球购物
深圳茁壮笔试题
2015/05/28 面试题
英语专业推荐信
2013/11/16 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
初中体育教学反思
2014/01/14 职场文书
医院辞职信范文
2014/01/17 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
MySQL事务的隔离级别详情
2022/07/15 MySQL