在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 相关文章推荐
读jQuery之六 缓存数据功能介绍
Jun 21 Javascript
jQuery在iframe中无法弹出对话框的解决方法
Jan 12 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
jQuery中end()方法用法实例
Jan 08 Javascript
15款最好的Bootstrap在线编辑器
Aug 03 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
Oct 21 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
JavaScript实现选中文字提示新浪微博分享效果
Jun 15 Javascript
webpack打包js的方法
Mar 12 Javascript
elementUI table表格动态合并的示例代码
May 15 Javascript
微信小程序页面传多个参数跳转页面的实现方法
May 17 Javascript
JavaScript修改注册表实例代码
Jan 05 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数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
Underscore.js常用方法总结
2015/02/28 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
2016/02/17 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
深入理解vue $refs的基本用法
2017/07/13 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python同步遍历多个列表的示例
2019/02/19 Python
浅析Django中关于session的使用
2019/12/30 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
大学生就业自我鉴定
2013/10/26 职场文书
商务主管岗位职责
2013/12/08 职场文书
小学教学随笔感言
2014/02/26 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
消防安全宣传标语
2014/06/07 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
医院科室评语
2015/01/04 职场文书
升学宴学生答谢词
2015/01/05 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers