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 相关文章推荐
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
javascript比较两个日期相差天数的方法
Jul 23 Javascript
微信小程序左滑删除效果的实现代码
Feb 20 Javascript
JS中IP地址与整数相互转换的实现代码
Apr 10 Javascript
小程序云开发初探(小结)
Oct 24 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
jQuery实现简易聊天框
Feb 08 jQuery
解决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
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
jquery获取复选框被选中的值
2014/03/22 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
使用python实现生成用户信息
2017/03/20 Python
python enumerate函数的使用方法总结
2017/11/15 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
2018/09/03 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
毕业设计计划书
2014/01/09 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
档案信息化建设方案
2014/05/16 职场文书
重阳节简报
2015/07/20 职场文书
合理化建议书范文
2015/09/14 职场文书
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫