在Vue中实现随hash改变响应菜单高亮


Posted in Javascript onMarch 09, 2020

情景

Vue+Element 实现管理页面菜单栏,

点击菜单时 router 改变 hash 访问不同子组件。

但是改变 hash 时菜单栏展开状态和 highlight 并不会同步,

需要手动实现。

Try Try See

第一反应是通过 onhashchange 监听 hash 的变化,

 location.hash.slice(2) 推给 menu 的 default-active 即可。

此时通过手动输入 url 或者前进后退时均可正常加载对应状态,但是通过组件中的 link 访问时,menu 的状态没有改变。

加入 alert 验证发现没有触发 hashchange。

Why

Seafault 的解释是

  • Vue-Router 底层调用的是 history.pushState

查阅 MDN 发现

  • 注意 pushState() 绝对不会触发 hashchange 事件,即使新的 URL 与旧的 URL 仅哈希不同也是如此。

Solution

Vue-Router 的文档中给出两个方案

watch $route 对象
const User = {
 template: '...',
 watch: {
 $route(to, from) {
  // react to route changes...
 }
 }
}

使用 beforeRouteUpdate

const User = {
 template: '...',
 beforeRouteUpdate(to, from, next) {
 // react to route changes...
 // don't forget to call next()
 }
}

另外

原来的组件实例会被复用。因为两个路由都渲染同个组件,比起销毁再创建,复用则显得更加高效。不过,这也意味着组件的生命周期钩子不会再被调用。

知识点扩展

vue关于点击菜单高亮与组件切换

有两种

一种是 使用router-link 这种直接可以用router-link-active 来写高亮样式   组件在路由跳转后 高亮依旧存在

一种是:is的应用了     点击触发事件 事件改变currentView的值 可以直接改掉  :is  这个引入文件入口

<template>
 <div class="index">
 <div class="headTop"></div>
 <div class="nav">
  <img src="../assets/img/logo.png" alt="">
  <el-row :gutter="20">
  <el-col :span="3" @click.native="tabChange('FirstScreen')" ><div class="grid-content bg-purple">首页</div></el-col>
  <el-col :span="3" @click.native="tabChange('pagetwo')"><div class="grid-content bg-purple">场站</div></el-col>
  <el-col :span="3" @click.native="tabChange('pagethree')" ><div class="grid-content bg-purple">订舱</div></el-col>
  
  </el-row>
 </div>
 <div :is="currentView"></div>
  <!-- <div class="aaa" >asdasd</div> -->
 </div> 
</template>
 
<script>
import FirstScreen from '../views/containers/FirstScreen'
import pagetwo from '../views/containers/pagetwo'
import pagethree from '../views/containers/pagethree'
 
export default {
 name: 'index',
 components:{
 FirstScreen,
 pagetwo,
 pagethree
 },
 data () {
 return {
  FirstScreen: 'FirstScreen',
  pagetwo: 'pagetwo',
  pagethree: 'pagethree',
  currentView: 'FirstScreen',//组建切换
 
  activeIndex: '1',
  activeIndex2: '1',
  
 }
 },
 computed:{
 
 },
 created(){
 
 },
 methods:{
 tabChange(tabItem) {
  this.currentView = tabItem;
  console.log(this.currentView);
 }
 }
}
</script>

到此这篇关于在Vue中实现随hash改变响应菜单高亮的文章就介绍到这了,更多相关vue 菜单高亮内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
漂亮的提示信息(带箭头)
Mar 21 Javascript
锋利的jQuery jQuery中的DOM操作
Mar 21 Javascript
怎么清空javascript数组
May 11 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
Dec 31 Javascript
jquery操作checkbox示例分享
Jul 21 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
js判断当前页面用什么浏览器打开的方法
Jan 06 Javascript
关于express与koa的使用对比详解
Jan 25 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 Javascript
vue项目出现页面空白的解决方案
Oct 31 Javascript
修改Vue打包后的默认文件名操作
Aug 12 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
Mar 08 #Javascript
JS中的const命令你真懂它吗
Mar 08 #Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 #Javascript
Vue vm.$attrs使用场景详解
Mar 08 #Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 #Javascript
vue-cli点击实现全屏功能
Mar 07 #Javascript
vue全屏事件开发详解
Jun 17 #Javascript
You might like
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php实现读取超大文件的方法
2014/07/28 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python实现简单socket通信的方法
2016/04/19 Python
Python理解递归的方法总结
2019/01/28 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
J2EE系统只能是基于web
2015/09/08 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
采购类个人求职的自我评价
2014/02/18 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
PHP中多字节字符串操作实例详解
2021/08/23 PHP
muduo TcpServer模块源码分析
2022/04/26 Redis