在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 CSS 修改学习第四章 透明度设置
Feb 19 Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
May 23 Javascript
javascript间隔刷新的简单实例
Nov 14 Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 Javascript
详解AngularJS中的表格使用
Jun 16 Javascript
Javascript编程之继承实例汇总
Nov 28 Javascript
php 修改密码实现代码
May 24 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
Apr 21 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
Jul 23 Javascript
简单的React SSR服务器渲染实现
Dec 11 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
php将会员数据导入到ucenter的代码
2010/07/18 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
实例解析Array和String方法
2016/12/14 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
Python生成随机验证码的两种方法
2015/12/22 Python
python套接字流重定向实例汇总
2016/03/03 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
解决yum对python依赖版本问题
2019/07/05 Python
pandas数据处理之绘图的实现
2020/06/15 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
应届行政管理专业个人自我评价
2013/12/28 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
学校工会工作总结2015
2015/05/19 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers