在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 相关文章推荐
改变状态栏文字的js代码
Jun 13 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
JavaScript面向对象的实现方法小结
Apr 14 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
整理关于Bootstrap警示框的慕课笔记
Mar 29 Javascript
jquery与js实现全选功能的区别
Jun 11 jQuery
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 Javascript
实例教学如何写vue插件
Nov 30 Javascript
如何对react hooks进行单元测试的方法
Aug 14 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
Jan 08 Javascript
详解vue beforeEach 死循环问题解决方法
Feb 25 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php 数据结构之链表队列
2017/10/17 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
[41:17]VG vs Optic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
C# .NET面试题
2015/11/28 面试题
项目计划书范文
2014/01/09 职场文书
学前班评语大全
2014/05/04 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
保卫工作个人总结
2015/03/03 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
使用Ajax实现无刷新上传文件
2022/04/12 Javascript