在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 相关文章推荐
jQuery对象和DOM对象相互转化
Apr 24 Javascript
JS 的应用开发初探(mootools)
Dec 19 Javascript
一个基于jquery的图片切换效果
Jul 06 Javascript
jquery分隔Url的param方法(推荐)
May 25 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
Nov 29 Javascript
详解Vue 动态添加模板的几种方法
Apr 25 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 Javascript
微信小程序日历组件使用方法详解
Dec 29 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
Angular8 实现table表格表头固定效果
Jan 03 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 Mysql日期和时间函数集合
2007/11/16 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
vue选项卡切换登录方式小案例
2019/09/27 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
python主线程捕获子线程的方法
2018/06/17 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
python存储16bit和32bit图像的实例
2018/12/05 Python
python制作抖音代码舞
2019/04/07 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
消防先进事迹材料
2014/02/10 职场文书
新任教师自我鉴定
2014/02/24 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
宣传标语大全
2014/07/01 职场文书
新娘婚礼致辞
2015/07/27 职场文书
公司食堂管理制度
2015/08/05 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS