这篇文章将为大家详细讲解有关在Vue中如何实现随hash改变响应菜单高亮,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可维护性和可测试性更强的代码库,Vue允许可以将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JavaScript,以用来渲染网页中相应的地方,所以越来越多的前端开发者使用vue。
情景
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改变响应菜单高亮”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。