在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 相关文章推荐
浅析AngularJS中的指令
Mar 20 Javascript
JavaScript实现Fly Bird小游戏
Dec 15 Javascript
使用Math.max,Math.min获取数组中的最值实例
Apr 25 Javascript
详解Vue整合axios的实例代码
Jun 21 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
微信小程序图片选择区域裁剪实现方法
Dec 02 Javascript
video.js 一个页面同时播放多个视频的实例代码
Nov 27 Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
vue使用element-ui按需引入
May 20 Vue.js
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
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python命令行工具Click快速掌握
2019/07/04 Python
python Django 创建应用过程图示详解
2019/07/29 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
护理专业优质毕业生自荐书
2014/01/31 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
请病假条范文
2015/08/17 职场文书
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
vue3获取当前路由地址
2022/02/18 Vue.js