在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 form action动态修改方法
Nov 04 Javascript
微信企业号开发之微信考勤Cookies的使用
Sep 11 Javascript
Bootstrap模态框禁用空白处点击关闭
Oct 20 Javascript
基于JavaScript实现带缩略图的轮播效果
Jan 12 Javascript
简单谈谈关于 npm 5.0 的新坑
Jun 08 Javascript
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
详解jQuery-each()方法
Mar 13 jQuery
浅谈一种让小程序支持JSX语法的新思路
Jun 16 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
Jun 24 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 Javascript
uni-app微信小程序登录授权的实现
May 22 Javascript
详解Vue Cli浏览器兼容性实践
Jun 08 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中有关长整数的一些操作教程
2019/09/11 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
详解React 条件渲染
2020/07/08 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
python实现ip地址的包含关系判断
2020/02/07 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
美国批发供应商:Kole Imports
2019/04/10 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
行政人员工作职责
2013/12/05 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
教师评语大全
2014/04/28 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
企业文化理念标语
2014/06/10 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
Python OpenCV实现图形检测示例详解
2022/04/08 Python
Golang jwt身份认证
2022/04/20 Golang
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL