当前位置: 首页 > news >正文

element-plus的el-tag标签关闭标签时的高亮显示逻辑

1.tag 实战步骤

  1. 首页的tag一开始就会存在,而且是不能进行删除的

  2. 当点击左侧栏的时候,如果tag没有该菜单名称则新增,如果已经有了那么当前tag背景为蓝色。

  3. 删除当前tag,如果是最后一个,那么路由调整到它前面那个标签并且背景变蓝,如果不是最后一个那么路由调整到它后面那个标签并且背景变蓝。

  4. 还有我们注意这个tag不论路由如何切换都是会存在的,所以这个tag一定要存在我们之前定义的Main.vue中。

2.实现分析

关闭时传入当前的tag和index;

首先删除标签(注意删除后数组数据会变化);

然后计算删除后的len值(如果删除前计算需要 -1 );

判断如果删除的不是当前项不做任何处理直接返回(不是当前项不会影响高亮显示);如果是当前项才做后续操作(route.name === tag);

判断len===index时,证明删除的项为当前项则高亮显示的索引需要减一;

否则证明高亮显示的为当前项(本来的一项被删除了,那么所以index就代表被删除后的当前项);

高亮显示通过,router.push()跳转到对应页面进行实现(首先高亮显示就是通过是否是当前路由来显示的);

3.代码:

 <div class="tags-box"><div class="tags" v-for="(tag,index) of tags" :key="tag.index"><el-tag:closable="tag==='首页'?false:true":effect="tag === currentRoute ?'dark':'plain'"@close="handleClose(tag,index)"@click="clickTag(tag)">{{tag}}</el-tag></div></div>
// 关闭tag标签
const handleClose = (tag, index) => {// 只有关闭当前标签才会影响显示(数据不会有任何影响)store.commit("layout/delTags", tag);// 判断如果关闭的不是当前标签不做任何处理console.log(route.meta.label, tag);if (route.meta.label !== tag) return;// 删除过后的数组长度let len = tags.value.length;// 长度=index说明是最后一个(最后一个要删除则高亮到前一个tag上)let routeList = router.getRoutes();if (len === index) {let path = routeList.find(item => item.meta.label === tags.value[index - 1]).path;router.push(path);} else {// 不相等时表明当前项后面还有tag,则将高亮索引设置为当前项的(删除后的index即原来高亮的下一个)let path = routeList.find(item => item.meta.label === tags.value[index]).path;router.push(path);}
};

相关文章:

  • Ubuntu GCC切换源
  • echarts 地图迁徙与地图下钻
  • MySQL教程笔记
  • SpringBoot / Vue 对SSE的基本使用
  • springboot整合日志,并在本地查看
  • [PHP]pearProject协作系统 v2.8.14 前后端
  • Elasticsearch 集群分片出现 unassigned 其中一种原因详细还原
  • RSA 加密算法的原理与加密过程深度解析(下篇)
  • java.lang.NoClassDefFoundError: javax/servlet/Filter
  • hive sql 遇到的一些函数使用
  • elementui el-upload 上传文件
  • 引擎系统设计思路 - 用户态与系统态隔离
  • LeetCode 501. 二叉搜索树中的众数【二叉搜索树中序遍历+Morris遍历】简单
  • PHP服务器端电商API原理及示例讲解(电商接口开发/接入)
  • diffusers-Load pipelines,models,and schedulers
  • 07.Android之多媒体问题
  • 2017 年终总结 —— 在路上
  • echarts的各种常用效果展示
  • HTTP请求重发
  • Invalidate和postInvalidate的区别
  • Less 日常用法
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Python实现BT种子转化为磁力链接【实战】
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • 离散点最小(凸)包围边界查找
  • 如何设计一个微型分布式架构?
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 学习HTTP相关知识笔记
  • AI算硅基生命吗,为什么?
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • #Ubuntu(修改root信息)
  • (12)Linux 常见的三种进程状态
  • (libusb) usb口自动刷新
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (八)Spring源码解析:Spring MVC
  • (搬运以学习)flask 上下文的实现
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)Android布局类型(线性布局LinearLayout)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Core 项目指定SDK版本
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET开发人员必知的八个网站
  • ::before和::after 常见的用法
  • @Documented注解的作用
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 数据结构 - C++]红黑树RBTree
  • [Asp.net mvc]国际化
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [CSS]文字旁边的竖线以及布局知识
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [HNOI2008]玩具装箱toy
  • [iOS]-NSTimer与循环引用的理解