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 设计模式学习 Factory
Jul 29 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
Mar 04 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
angular中的cookie读写方法
Aug 02 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
Oct 09 jQuery
js实现鼠标移动到图片产生遮罩效果
Oct 21 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
vue 使用自定义指令实现表单校验的方法
Aug 28 Javascript
你准备好迎接vue3.0了吗
Apr 28 Javascript
React 高阶组件HOC用法归纳
Jun 13 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获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
Yii2选项卡的简单使用
2017/05/26 PHP
Laravel下生成验证码的类
2017/11/15 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
解析Python编程中的包结构
2015/10/25 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
python实现简易通讯录修改版
2018/03/13 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python读出当前时间精度到秒的代码
2019/07/05 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
教育实习生的自我评价分享
2013/11/21 职场文书
高分子材料与工程专业推荐信
2013/12/01 职场文书
保证书范文大全
2014/04/28 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书