Vue3:分析elementplus表格第一列序号hover变多选框实现思路

news2024/12/24 3:12:59

灵感来自Vue el-table 表格第一列序号与复选框hover切换
源码是通过Vue2+elementui去实现的,本篇是通过Vue3+elementplus实现,所以在代码上面有些许不同,但函数名一致
git

实现思路:

①通过表头是多选框,我们可以判定这一列原本就是多选框,只是把多选框隐藏了然后显示序列号,所以在这一列的插槽中我们有两个元素,一个是多选框,一个是序列号
在这里插入图片描述

②通过图里这个效果我们可以直观的看到,是鼠标移上去之后序号变成多选框
③我们怎么去判定鼠标移上去了?通过表格的两个事件
表格事件
④我们可以设定一个参数columnCheckedId,用来判断什么时候该出现多选框,当然我们用的是v-if这个方法,当鼠标移上去之后,拿到行的索引,即row.index,如果这一列的类型是selection(多选框这一列的类型是selection)多选框
那么我们可以令columnCheckedId.value = row.index,当

<div v-if="columnCheckedId == row.id || checkedList[$index]">

时,多选框出现,第二个或条件checkedList[$index]是选中的时候出现多选框,即第五点👇👇👇
⑤还有一个情况多选框会出现,那就是选中的时候,不可能我们选中了鼠标移出该行后又变成序列号
所以我们设定一个checkedList数组来判定是否选中,绑定多选框的v-model,如果选中,即checkedList.value[index] == true,同时表格本身存在的多选框我们也置为true,通过toggleRowSelection方法toggleRowSelection
思路梳理:
我们把原来的多选框隐藏→
通过插槽添加一个伪选择框序列号
设置一个参数columnCheckedId和条件v-if="columnCheckedId == row.id || checkedList[$index]"判定是否出现伪多选框
通过cell-mouse-enter 鼠标移入事件拿到row.index→
columnCheckedId.value = row.index,此时columnCheckedId == row.id然后选择框出现→
如果选中,即checkedList.value[index] == true,此时columnCheckedId == checkedList[$index]鼠标即使不在此行,选择框依然存在,然后通过toggleRowSelection方法把真正的选择框值设为ture→
如果没有选中,通过cell-mouse-leave鼠标移出事件把columnCheckedId.value置为空,那么v-if条件不成立,伪选择框不出现,序列号出现

源码如下:

<el-table @cell-mouse-enter="mouseinrow"
					@cell-mouse-leave="mouseoutrow" />
<el-table-column type="selection" width="50" align="left">
	<!-- row 行 $index 当前行的索引 -->
	<template #default="{ row, $index }">
	<!-- 定义了一个columnCheckedId -->
	<!-- 鼠标移动上去的时候出现选择框,已经选择的时候也出现选择框 -->
		<div v-if="columnCheckedId == row.id ||checkedList[$index]">
		<!-- 定义了一个checkedList数组 -->
		<!-- 选中的时候checkedList[$index]==true 同时利用cellCheckbox方法把原来的真选择框置为true -->
			<el-checkbox
				v-model="checkedList[$index]"
				@change="cellCheckbox(row, $index)"
            ></el-checkbox>
		</div>
		<!-- 序列号 -->
        <span v-else>{{ $index + 1 }}</span>
	</template>
	// 定义了一个columnCheckedId 表示鼠标移入的行数
	const columnCheckedId = ref('')
	// 已经选择的框,可能有多个
	const checkedList = ref([])
	//鼠标移入表格当前行,就会出现row.index 便出现多选框
	const mouseinrow = (row, column, cell, event) => {
		// 如果这列是selection
		if (column.type == 'selection') {
			// row.index 行的索引 令columnCheckedId.value = row.index
			columnCheckedId.value = row.index
		}
	}
	// 鼠标移出表格当前行
	const mouseoutrow = (row, column, cell, event) => {
		// columnCheckedId.value 为空,选择框不出现,则不等于 row.index和checkedList.value[index]
		// 就出现$index+1 即当前行的索引
		columnCheckedId.value = ''
	}
	// toggleRowSelection 用于多选表格,切换某一行的选中状态,
	// 如果使用了第二个参数,则可直接设置这一行选中与否
	// 参数 row, selected
	
	// 鼠标移上去之后选择了,checkedList.value[index] == true
	const cellCheckbox = (row, index) => {
		if (checkedList.value[index]) {
		// 表格自带toggleRowSelection方法
			table.value.toggleRowSelection(row, true)
		} else {
			table.value.toggleRowSelection(row, false)
		}
	}

Vue2源码:
vue2源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

9.1、面向对象编程

文章目录面向对象编程简介面向对象编程面向对象编程的三大特性对象和类封装练习继承什么是继承重写父类方法多继承私有属性和私有方法多态项目案例&#xff1a;栈和队列的封装栈的封装队列的封装python是面向对象的编程语言 面向对象编程简介 “面向过程”(Procedure Oriente…

Java并发编程—synchronized

文章目录synchronized 的底层实现原理监视器锁对象的锁的获取过程如下&#xff1a;monitorexit&#xff1a;加synchronized锁前后对比synchronized的作用synchronized的三种主要用法synchronized为什么是 非公平锁&#xff1f;————————————————————————…

大数据项目 --- 电商数仓(一)

这个项目实在数据采集基础使用的,需要提前复习之前学的东西,否则的话就是很难继续学习.详见博客数据项目一 ---数据采集项目.大数据项目 --- 数据采集项目_YllasdW的博客-CSDN博客大数据第一个项目笔记整理https://blog.csdn.net/m0_47489229/article/details/127477626 目录 …

Android 基于物理特性动画 —— 弹簧动画

在安卓开发中我们可以通过动画添加视觉提示&#xff0c;向用户通知应用中的动态。当界面状态发生改变时&#xff08;例如有新内容加载或有新操作可用时&#xff09;&#xff0c;动画尤其有用。动画还为应用增加了优美的外观&#xff0c;使其拥有更高品质的外观和风格。 首先来…

Java并发编程—并发和并行、线程上下文

文章目录并发和并行并发和并行的区别上下文切换相关问题为什么循环次数少的情况下&#xff0c;单线程快&#xff1f;什么时候需要用多线程&#xff1f;线程上下文切换消耗的时长&#xff1f;用什么测试的线程上下文&#xff1f;面试回答下面的工具会加分&#xff1a;如何减少上…

DQL简介

学习笔记之DQL 数据查询语言&#xff0c;用来查询数据库中表的记录。 查询关键字&#xff1a;select 基本查询 1查询多个字段 select 字段1&#xff0c;字段2&#xff0c;字段3.. from 表名; select * from 表名;2设置别名 select 字段1 [别名1],字段2[别名2]... from 表名;3…

233搞懂HMM(隐马尔可夫)

文章目录2条性质3个参数3个问题维特比算法参考资料有向图模型&#xff0c;主要用于时序数据建模&#xff0c;在语音识别&#xff0c;自然语言处理等领域&#xff0c;以及在知识图谱命名实体识别中的序列标注&#xff0c;有广泛应用。 HMM模型由两部分组成&#xff0c; 观测变量…

spring boot 应用mybatis

Mybatis入门: Mybatis入门_做测试的喵酱的博客-CSDN博客 目录 一、spring boot 应用mybatis 核心 二、举例&#xff1a; 2.1 背景 2.2 项目结构&#xff1a; 2.3 依赖包 pom 2.4 项目配置文件application.yml 2.5 实例层entity 2.6 mybatis的mapper层 2.7 spring boot…

Android—过渡按钮的简单实现

Android—过渡按钮的简单实现前言准备工作登录页面(activity_main.xml)登录成功页面(activity_new.xml)主要代码给登录按钮设置监听事件(MainActivity.xml)点击登录按钮出现加载动画(TransitionButton.java)当isSuccessful判断为true时(MainActivity.xml)加载动画结束时切入跳转…

C语言笔记-16-Linux基础-文件元数据

C语言笔记-16-Linux基础-文件元数据 文章目录C语言笔记-16-Linux基础-文件元数据前言一、概述二、ln 硬连接三、软连接四、stat 获取元数据总结前言 自学笔记&#xff0c;没有历史知识铺垫&#xff08;省略百度部分&#xff09;C语言笔记-16-Linux基础-文件元数据 一、概述 文…

Kaggle泰坦尼克号-决策树Top 3%-0基础代码详解

Titanic Disaster Kaggle&#xff0c;里的经典入门题目&#xff0c;因为在学决策树所以找了一个实例学习了一下&#xff0c;完全萌新零基础&#xff0c;所以基本每一句都做了注释。 原文链接&#xff1a;Titanic: Simple Decision Tree model score(Top 3%) | Kaggle 目录 1.…

SolidWorks如何绘制环形波纹垫片

环形波纹垫片主要用于螺纹式固定件或者防滑螺纹固定中,那这个环形垫片一般怎么用SolidWorks制作呢?首先我们观察到这样的垫片是上下此起彼伏的波纹状,厚度一般1MM左右,制作起来还是有点小难度,但是通过仔细观察,我们可以看到它的大概走向,如图 也就是特征就是这边凹下去…

获取Android签名MD5的方式

形而上者谓之道&#xff0c;形而下者谓之器 我们在申请百度云/腾讯云等第三方的各种服务时&#xff0c;经常会遇到需要提供包名和签名MD5的情况。这里特地总结一下&#xff1a; 1. 获取MD5的一般方式 1.1 有签名文件(.keystore)的情况下: keytool -list -v -keystore XXX.key…

【沐风老师】3DMAX一键生成圣诞树建模插件使用教程

圣诞节快到了&#xff0c;给大家分享一款3DMax一键生成圣诞树模型插件&#xff1a; 3DMAX一键生成圣诞树建模插件&#xff0c;可以生成定制和随机两种3D圣诞树模型&#xff0c;并自动赋予材质和贴图。 【安装方法】 方法一&#xff1a;解压后直接拖动插件脚本文件到3dMax窗口…

使用springboot实现jsonp|jsonp的实现|JSONP的实现使用springboot

1、服务端&#xff1a; 1.1、项目目录&#xff1a; 1.2、pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

从一到无穷大 #3 对象存储.浅谈

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录引言Windows Azure StorageNosql&#xff1a;TiKV为例总结引言 天才的开源精神对于普…

67-94-hive-函数-开窗函数-常用函数-udf自定义函数

67-hive-函数&#xff1a; UDF:一进一出&#xff0c;普通函数 UDAF:多进一出&#xff0c;聚合函数 UDTF&#xff1a;一进多出&#xff0c;炸裂函数 一、多指的是输入数据的行数。一行变多行&#xff0c;多行变一行。 函数 #查看系统自带的函数 hive> show functions; …

Docker以标准方式安装部署Redis

Docker安装redis的命令很简单&#xff0c;但是很多都是半成品的命令&#xff0c;说白了&#xff0c;就是自己玩玩&#xff0c;一个demo级别的redis而已。 本篇文章以最全的命令方式安装部署Redis。 注意&#xff1a; 本篇只是单机版的&#xff0c;只是公司测试环境使用&…

解决npm的 EACCES: permission denied 问题

居上位而不骄&#xff0c;在下者而不忧。 平时项目开发使用npm都顺风顺水的&#xff0c;but今天新建项目时&#xff0c;就出现了权限错误&#xff0c;具体如下&#xff1a; 但是通过下面的提示就可以轻松解决。 sudo chown -R 502:20 “/Users/cheng.wang/.npm” 官网相关议题…

Redis源码篇(7)——哨兵模式

哨兵模式 哨兵模式即在主从复制的基础上增加哨兵监控以控制主从切换实现高可用的一种模式。 本篇主要介绍sentinel系统初始化&#xff0c;心跳检测&#xff0c;故障转移的过程 初始化 从最开始的 redis-server xxx.conf --sentinel 、 redis-sentinel xxx.conf 命令看起。当一…