在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 相关文章推荐
JavaScript中Array 对象相关的几个方法
Dec 22 Javascript
EXT中xtype的含义分析
Jan 07 Javascript
js动态拼接正则表达式的两种方法
Mar 04 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
Apr 10 Javascript
详解Node.js实现301、302重定向服务
Apr 07 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
vue项目中导入swiper插件的方法
Jan 30 Javascript
Vue 路由 过渡动效 数据获取方法
Jul 31 Javascript
关于RxJS Subject的学习笔记
Dec 05 Javascript
JavaScript this在函数中的指向及实例详解
Oct 14 Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 11 Javascript
jQuery实现鼠标拖动图片功能
Mar 04 jQuery
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
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
Python3.6简单操作Mysql数据库
2017/09/12 Python
python实现机器学习之多元线性回归
2018/09/06 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
Shell如何接收变量输入
2012/09/24 面试题
shell变量的作用空间是什么
2013/08/17 面试题
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
分层教学实施方案
2014/03/19 职场文书
环境日宣传活动总结
2014/07/09 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
党员身份证明材料
2015/06/19 职场文书
基于Go语言构建RESTful API服务
2021/07/25 Golang