在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 相关文章推荐
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
编写自己的jQuery插件简单实现代码
Apr 19 Javascript
jqTransform form表单美化插件使用方法
Jul 05 Javascript
js简单倒计时实现代码
Apr 30 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
基于Node.js的大文件分片上传示例
Jun 19 Javascript
jQuery Raty星级评分插件使用方法实例分析
Nov 25 jQuery
在Webpack中用url-loader处理图片和字体的问题
Apr 28 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 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
php file_get_contents函数轻松采集html数据
2010/04/22 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
php无序树实现方法
2015/07/28 PHP
PHP时间函数使用详解
2019/03/21 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
深入浅析python继承问题
2016/05/29 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
python构建深度神经网络(续)
2018/03/10 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
详解Python文件修改的两种方式
2019/08/22 Python
python3.7调试的实例方法
2020/07/21 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
医学院毕业生自荐信范文
2014/03/06 职场文书
党校党性分析材料
2014/12/19 职场文书
违纪检讨书
2015/01/27 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python