vue高亮一级、二级导航
使用vue开发过程中有的项目会存在多级导航的情况,如下图,这种就存在了两层,那么该如何高亮一级导航,又该如何高亮二级导航这就是今天我要记录的内容。

1、高亮一级导航很简单,代码如下:
// 点击一级导航
changeFirstLevel(index,e) {
this.secondIndexCur = -1;
this.firstIndexCur = index;
}
2、高亮二级导航,代码如下:
// view部分
<ul class="firstLevelNav">
<li v-for="(item, index) in customNav" :key="index">
<router-link :to="item.pathUrl">
<div :class="{'cur': firstIndexCur == index}" @click="changeFirstLevel(index, $event)">{{item.name}}</div>
</router-link>
<ul class="secondLevelNav">
<li v-for="(sonItem, sonIndex) in item.secondLevelNavList" :key="sonIndex">
<router-link :to="sonItem.pathUrl">
<div :class="[secondIndexCur == index + ',' + sonIndex ? 'cur' : '']" @click="changeSecondLevel(index, sonIndex, $event)">{{sonItem.name}}</div>
</router-link>
</li>
</ul>
</li>
</ul> // 点击二级导航
changeSecondLevel(index, sonIndex, e) {
this.firstIndexCur = -1;
this.secondIndexCur = index + ',' + sonIndex;
}
(注意:为什么在<router-link></router-link>中又写了一个div呢,是因为我在完成代码后点击导航高亮样式并不能成功添加,开始我是直接把class添加到了rouer-link上)
以下是导航组件的全部代码:
<template>
<!-- 自定义报表 - 左侧导航 -->
<div class="customNav">
<div class="pic">
<img src="./images/pic.png" alt="">
</div>
<ul class="firstLevelNav">
<li v-for="(item, index) in customNav" :key="index">
<router-link :to="item.pathUrl">
<div :class="{'cur': firstIndexCur == index}" @click="changeFirstLevel(index, $event)">{{item.name}}</div>
</router-link>
<ul class="secondLevelNav">
<li v-for="(sonItem, sonIndex) in item.secondLevelNavList" :key="sonIndex">
<router-link :to="sonItem.pathUrl">
<div :class="[secondIndexCur == index + ',' + sonIndex ? 'cur' : '']" @click="changeSecondLevel(index, sonIndex, $event)">{{sonItem.name}}</div>
</router-link>
</li>
</ul>
</li>
</ul>
</div>
</template> <script>
export default {
data() {
return {
firstIndexCur: -1, // 一级导航添加类名元素
secondIndexCur: -1, // 一级导航添加类名元素
customNav: [{
name: '数据源',
pathUrl: '/dataSource',
secondLevelNavList: [{
name: '新建',
pathUrl: '/newlyBuild/addData'
}]
},{
name: '配置SQL',
pathUrl: '/configSQL',
secondLevelNavList: [{
name: '新建',
pathUrl: '/configNewlyBuild/addData'
}]
},{
name: '业务SQL',
pathUrl: '/businessSQL',
secondLevelNavList: []
}],
pathName: ''
}
},
mounted() {
this.pathName = this.$router.history.current.path;
this.pathName = this.pathName === '/' ? '/dataSource' : this.pathName; // 默认路由
this.highLightLeftNav();
},
watch: {
// 监听 url 的变化
$route(to, from) {
this.pathName = to.path;
this.highLightLeftNav();
}
},
methods: {
// 点击一级导航
changeFirstLevel(index,e) {
this.secondIndexCur = -1;
this.firstIndexCur = index;
},
// 点击二级导航
changeSecondLevel(index, sonIndex, e) {
this.firstIndexCur = -1;
this.secondIndexCur = index + ',' + sonIndex;
},
// 刷新页面时根据url高亮左侧导航选项
highLightLeftNav() {
this.firstIndexCur = -1;
this.secondIndexCur = -1;
this.customNav.forEach((item, index) => {
if(this.pathName.indexOf(item.pathUrl) !== -1) {
this.firstIndexCur = index;
return;
}else if(item.secondLevelNavList.length){
item.secondLevelNavList.forEach((sonItem, sonIndex) => {
if(this.pathName.indexOf(sonItem.pathUrl) !== -1) {
this.secondIndexCur = index + ',' + sonIndex;
return;
}
});
}
});
},
}
}
</script> <style lang="scss" type="text/css" scoped>
vue高亮一级、二级导航的更多相关文章
- Vue 中的Vue Router一级路由,二级路由,三级路由以及跳转
今天编写了一下Vue中的路由 先用命令行新建一个空的项目,并且我知道要用路由,就下载了路由的相关依赖 vue init webpack demo5 完毕之后进入所在的项目 cd demo5 之后用vs ...
- TP3.2二级导航与高亮显示
闲来无事,记记笔记 二级导航的实现,就是一个二级联动,嗯 先来看看数据库,我喜欢用一个表,表多了就不好玩了 二级代号取一级导航的代号就行了,做个简单的栗子: 代码部分: 看控制器,大头在这: < ...
- js二级导航
js写二级导航要点 1.ul li 2.js获取元素 3.setInterval(function(),time); 代码如下 <style type="text/css"& ...
- jQuery制作右侧边垂直二级导航菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 纯CSS实现二级导航下拉菜单--css的简单应用
思想:使用css的display属性控制二级下拉菜单的显示与否.当鼠标移动到一级导航菜单的li标签时,显示二级导航菜单的ul标签.由于实现起来比较简单,所以在这里直接给出了参考代码. 1.纯CSS二级 ...
- 用jquery制作一个二级导航下拉菜单
1使用$(function(){...})获取到想要作用的HTML元素. 2通过使用children()方法寻找子元素. 3通过使用show()方法来显示HTML元素. 4通过 ...
- JS写的二级导航栏(利用冒泡原理)
今天给大家分享一种用JS写的导航栏,虽然我们工作中不会使用JS来做导航栏,为了练习我们用JS来做一个JS导航栏 这种方法要比其他方法代码量少很多,但是需要对事件冒泡有一定的理解,如果需要理解冒泡可以参 ...
- JavaScript(获取或设置html元素的宽,高,坐标),确定和判断鼠标是否在元素内部,二级导航菜单鼠标离开样式问题解决
设置: document.getElementById('id').style.width=value document.getElementById('id').style.height=va ...
- html css二级导航栏
二级导航栏制作: 1.将一级导航栏去除列表样式(list-style:none),并给予浮动,使其横向排列(float:left) 2.给每个li中添加一个<a></a>标签, ...
随机推荐
- 技术选型之Docker容器引擎
https://mp.weixin.qq.com/s?__biz=Mzg3NjAyOTUzMQ==&mid=2247484524&idx=1&sn=ac041bf3e36dda ...
- hibernate映射配置
1. 普通字段类型 2. 主键映射 单列主键映射 多列作为主键映射 主键生成策略,查看api: 5.1.2.2.1. Various additional generators 数据库: Q:一个 ...
- Selenium 2自动化测试实战27(unittest重要概念,test fixture、test case、test suite和test runne)
一.unittest重要概念 4个重要概念:test fixture.test case.test suite和test runner. 1.Test Case一个TestCase的实例就是一个测试用 ...
- 页面Demo实现
1.实现效果如下所示: 此Demo涉及到的知识点有: 1.页面布局思路; 2.TableViewCell实现单元格动态行高; 3.设置字符串中数字的颜色; 4.Cell圆角实现方法之一; 5.Cell ...
- centOS7忘记密码,修改root账号密码
centOS7忘记密码,修改root账号密码 RHEL7 的世界发生了变化,重置 root 密码的方式也一样.虽然中断引导过程的旧方法(init=/bin/bash)仍然有效,但它不再是推荐的.“Sy ...
- three中的着色器示例
其实在3D引擎/库的帮助下,我们做webgl开发的难度已经很大大地降低了,熟悉相关API的话,开发一个简单的3D程序可以说是很轻松的事情. 在我看来,webgl的核心就是着色器(顶点着色器.片元着色器 ...
- Matlab中的eig函数和Opecv中eigen()函数的区别
奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...
- MYSQL中重命名procedure的一种方法
最近有用到对存储过程(procedure)重命名的功能,在网上找了一下资料都没有讲到在mysql中是如何实现的,当然可以删掉再重建,但是应该有别的方法,在"mysql"这个数据库( ...
- python高级 之(四) --- 模块方法
模块 时间模块:time/datatime/calendar. 系统操作文件模块:os time模块 介绍 import time # 获取当前时间, 结果是存在时间元组中的.星期一是从0开始的 # ...
- vim编辑器详解(week1_day3)
vi编辑器 作用:编辑文本文件中的内容的工具 命令历史 末行模式中,以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中 ...