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拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
JavaScript创建对象的写法
Aug 29 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
js中数组(Array)的排序(sort)注意事项说明
Jan 24 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
微信小程序  生命周期详解
Oct 27 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
three.js实现围绕某物体旋转
Jan 25 Javascript
详解webpack多页面配置记录
Jan 22 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
Vue根据条件添加click事件的方式
Nov 09 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
php代码优化及php相关问题总结
2006/10/09 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
使用Python设计一个代码统计工具
2018/04/04 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python 如何停止一个死循环的线程
2020/11/24 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
服装机修工岗位职责
2013/12/26 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
行政助理的岗位职责
2014/02/18 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL