解决Vue 3 + Element Plus树形表格全选多选以及子节点勾选的问题

目录

前言 

 问题概述

解决方案 

1. 创建树形表格

2. 实现全选功能 

3. 实现多选功能

4. 实现子节点勾选

5. 实现父节点勾选

总结


前言 

作者简介: 懒大王敲代码,计算机专业应届生

今天给大家聊聊解决Vue 3 + Element Plus树形表格全选多选以及子节点勾选的问题,希望大家能觉得实用!
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖  

在Web应用程序中,树形表格是一种常见的数据展示方式,它使用户能够查看层次结构数据。而在使用Vue 3和Element Plus构建树形表格时,处理全选和多选以及子节点勾选的问题可能会有些挑战。本文将介绍如何解决Vue 3和Element Plus树形表格中的这些常见问题,并提供示例代码以便于理解。

 问题概述

在树形表格中,通常需要实现以下功能:

全选:用户可以通过勾选表头的复选框来选中所有节点。
多选:用户可以通过勾选每一行的复选框来选中特定节点。
子节点勾选:当用户勾选某个节点的同时,其子节点也会被自动勾选。
父节点勾选:当所有子节点被勾选时,父节点也会自动被勾选。
在Vue 3和Element Plus中,如何实现上述功能可能不太明显,因此我们将一步一步解决这些问题。

解决方案 

1. 创建树形表格

首先,我们需要创建一个基本的树形表格,以便进一步操作。我们可以使用Element Plus中的el-tableel-table-column来构建表格。

在下面的示例中,我们创建了一个包含两个节点的树形表格。第一列包含了复选框,用于选择节点。现在,我们将一步一步解决上述问题。 

<template><el-table :data="data" style="width: 100%"><el-table-columntype="selection"width="55"></el-table-column><el-table-columnlabel="Name"prop="name"></el-table-column><el-table-columnlabel="Children"prop="children"><template v-slot="scope">{{ scope.row.children.length }}</template></el-table-column></el-table>
</template><script>
export default {data() {return {data: [{name: "Node 1",children: [{name: "Node 1.1",children: [],},{name: "Node 1.2",children: [],},],},{name: "Node 2",children: [],},],};},
};
</script>

2. 实现全选功能 

要实现全选功能,我们需要添加一个控制全选状态的变量selectAll,并在表头的复选框中使用v-model绑定它

<template><el-table :data="data" style="width: 100%"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table>
</template><script>
export default {data() {return {data: [// ...],selectAll: false,};},
};
</script>

 我们在表头的复选框上绑定了selectAll变量,但还没有实现其功能。我们需要在methods部分添加一个selectAllNodes方法,用于全选或取消全选所有节点。

<script>
export default {data() {return {data: [// ...],selectAll: false,};},methods: {selectAllNodes() {this.$refs.treeTable.toggleAllSelection();},},
};
</script>

现在,我们需要在页面上添加一个全选按钮,使用户能够触发selectAllNodes方法。 这样,我们就可以实现树形表格的全选功能。

<template><div><el-button @click="selectAllNodes">{{ selectAll ? 'Unselect All' : 'Select All' }}</el-button><el-table:data="data"style="width: 100%"ref="treeTable"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table></div>
</template>

3. 实现多选功能

要实现多选功能,我们需要在表格上添加一个@selection-change事件监听器,该事件在选择项发生变化时触发。我们可以在事件处理程序中更新选中的节点列表。

<template><div><el-button @click="selectAllNodes">{{ selectAll ? 'Unselect All' : 'Select All' }}</el-button><el-table:data="data"style="width: 100%"ref="treeTable"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table></div>
</template><script>
export default {data() {return {data: [// ...],selectAll: false,selectedNodes: [],};},methods: {selectAllNodes() {this.$refs.treeTable.toggleAllSelection();},handleSelectionChange(selection) {this.selectedNodes = selection;},},
};
</script>

现在,selectedNodes数组将包含所有选中的节点。用户可以通过勾选每一行的复选框来选择特定节点。 

4. 实现子节点勾选

在树形表格中,通常希望当用户勾选父节点时,其所有子节点也会被自动勾选。我们可以使用递归方法来实现这个功能。

首先,添加一个selectChildren方法,该方法接受父节点和一个布尔值,用于标识是否选中父节点。在方法中,我们将遍历父节点的所有子节点,并设置它们的选中状态。

<template><el-table:data="data"style="width: 100%"ref="treeTable"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table>
</template><script>
export default {data() {return {data: [// ...],selectAll: false,selectedNodes: [],};},methods: {// ...selectChildren(parent, isSelected) {parent.children.forEach((child) => {this.$refs.treeTable.toggleRowSelection(child, isSelected);if (child.children) {this.selectChildren(child, isSelected);}});},},
};
</script>

接下来,我们需要在handleSelectionChange方法中检测是否选中了父节点,并调用selectChildren方法。 

<template><el-table:data="data"style="width: 100%"ref="treeTable"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table>
</template><script>
export default {data() {return {data: [// ...],selectAll: false,selectedNodes: [],};},methods: {// ...handleSelectionChange(selection) {this.selectedNodes = selection;selection.forEach((node) => {if (node.children) {this.selectChildren(node, node.selected);}});},},
};
</script>

现在,当用户选中父节点时,所有子节点也会被自动勾选。

5. 实现父节点勾选

要实现父节点勾选功能,我们需要在handleSelectionChange方法中检测父节点是否应该被勾选。如果所有子节点都被选中,父节点也应该被选中。如果有任何一个子节点未被选中,父节点应该被取消选中。

我们可以使用递归方法来检查子节点的选中状态,并设置父节点的选中状态。

<template><el-table:data="data"style="width: 100%"ref="treeTable"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55":selectable="selectAll"></el-table-column><!-- ... --></el-table></template><script>
export default {data() {return {data: [// ...],selectAll: false,selectedNodes: [],};},methods: {// ...handleSelectionChange(selection) {this.selectedNodes = selection;selection.forEach((node) => {if (node.children) {this.selectChildren(node, node.selected);}this.selectParent(node);});},selectParent(node) {if (node.parent) {const siblings = node.parent.children;const selectedSiblings = siblings.filter((sibling) => sibling.selected);if (selectedSiblings.length === siblings.length) {// All siblings are selected, select the parentthis.$refs.treeTable.toggleRowSelection(node.parent, true);} else {// Not all siblings are selected, deselect the parentthis.$refs.treeTable.toggleRowSelection(node.parent, false);}this.selectParent(node.parent);}},},
};
</script>

现在,当用户选中所有子节点时,父节点也会自动被选中。如果任何子节点未被选中,父节点将被取消选中。 

总结

在本文中,我们解决了Vue 3和Element Plus树形表格中的全选、多选、子节点勾选和父节点勾选等常见问题。通过逐步实现这些功能,您可以构建功能强大且用户友好的树形表格组件,以满足各种数据展示需求。希望这些示例代码对您有所帮助,让您更好地理解和使用Vue 3和Element Plus。

关于解决Vue 3 + Element Plus树形表格全选多选以及子节点勾选的问题,懒大王就先分享到这里了,如果你认为这篇文章对你有帮助,请给懒大王点个赞点个关注吧,如果发现什么问题,欢迎评论区留言!!💕💕       

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

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

相关文章

【MATLAB】EEMD+FFT+HHT组合算法

代码原理 EEMD&#xff08;经验模态分解&#xff09;FFT&#xff08;快速傅里叶变换&#xff09;HHT&#xff08;希尔伯特-黄变换&#xff09;组合算法是一种常用的信号处理和分析方法。这个组合算法包含了EEMD、FFT和HHT三个步骤&#xff0c;可以用于处理非线性和非平稳信号。…

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音识别(一)

官方文档链接&#xff1a;https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件&#xff0c;目前该插件仅认证后的小程序。 语音识别…

了解Dubbo配置:优先级、重试和容错机制的秘密【五】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 了解Dubbo配置&#xff1a;优先级、重试和容错机制的秘密【五】 前言Dubbo高级配置概述不同配置覆盖关系重试与容错处理机制负载均衡机制 前言 Dubbo作为一款强大的分布式服务框架&#xff0c;其高级…

(2024,分数蒸馏抽样,Delta 降噪分数,LoRA)PALP:文本到图像模型的提示对齐个性化

PALP: Prompt Aligned Personalization of Text-to-Image Models 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 4. 提示对齐方法 4.1 概述 4.2 个性化 4.3 提示对齐分数抽…

报表生成器FastReport .Net用户指南:数据源与“Data“窗口

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案&#xff0c;使用FastReport .NET可以创建独立于应用程序的.NET报表&#xff0c;同时FastReport .Net支持中文、英语等14种语言&#xff0c;可以让你的产品保证真正的国际性。 FastReport.NET官方版…

央视推荐的护眼灯是哪款?教育部认可护眼灯品牌

许多家长一般都会给孩子买上许多学习用品&#xff0c;比如现在一些学习桌椅、读写笔灯等等&#xff0c;配有蛮多的学习用具&#xff0c;但对孩子学习时用的护眼台灯很忽略&#xff0c;没有给孩子选好真正合格好用的护眼台灯&#xff0c;就容易让孩子的视觉形成偏差&#xff0c;…

Pixel手机进入工程模式、是否是Version版本?

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

APP加固原理与作用

文章目录 引言正文1. 什么是APP加固&#xff0c;加固原理是什么&#xff1f;2. 加固的作用是什么&#xff1f;加固后是否完全不会被破解&#xff1f;3. 如何提前规避加固新版本可能带来的风险&#xff1f;4. 付费加固与免费加固的区别是什么&#xff1f; 白嫖的混淆加密工具总结…

代码随想录刷题笔记(DAY11)

今日总结&#xff1a;继续准备期末&#xff0c;今天的算法题目比较简单&#xff0c;晚上看看能不能再整理一篇前端的笔记。 Day 11 01. 有效的括号&#xff08;No. 20&#xff09; 题目链接 代码随想录题解 1.1 题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff…

Android-常用数据结构和控件

HashMap 的原理 HashMap 的内部可以看做数组链表的复合结构。数组被分为一个个的桶(bucket)。哈希值决定了键值对在数组中的寻址。具有相同哈希值的键值对会组成链表。需要注意的是当链表长度超过阈值(默认是8)的时候会触发树化&#xff0c;链表会变成树形结构。 把握HashMap的…

5 - 声明式事务

传统事务流程&#xff1a; Connection connection JdbcUtils.getConnection(); try {//1. 先设置事务不要自动提交connection.setAutoCommit(false);//2. 进行各种 crud//多个表的修改&#xff0c;添加 &#xff0c;删除select from 商品表 > 获取价格//修改用户余额updat…

“确定要在不复制其属性的情况下复制此文件?”解决方案(将U盘格式由FAT格式转换为NTFS格式)

文章目录 1.问题描述2.问题分析3.问题解决3.1 方法一3.2 方法二3.3 方法三 1.问题描述 从电脑上复制文件到U盘里会出现“确定要在不复制其属性的情况下复制此文件&#xff1f;”提示。 2.问题分析 如果这个文件在NTFS分区上&#xff0c;且存在特殊的安全属性。那么把它从NT…

请查收“链上天眼”2023年成绩单

1月10日是中国人民警察节&#xff0c;是一份责任&#xff0c;更一份安心&#xff0c;随着科技的发展&#xff0c;链上安全领域的技术与工具不断更新迭代&#xff0c;更加安全的Web3世界正在构建。 根据欧科云链安全团队统计&#xff0c;2023 年全球范围内利用虚拟货币进行诈骗…

Radzen Blazor Studio 脚手架框架解读

背景 组织管理管理准备使用Blazor这个工具实现&#xff0c;因为其有对应的 scaffold 脚手架&#xff0c;先构建数据库&#xff0c;然后通过向导&#xff0c;生成CRUD以及对应的接口&#xff0c;那么有必要看一下&#xff0c;其内部的代码结构是什么样的。 结构 接口层 有两类…

Python——for循环的嵌套

用Python坚持表白一百天&#xff0c;每天都送10朵花&#xff0c;一百天表白成功&#xff01; i1 for i in range(1,101):print(f"今天是表白的第{i}天&#xff0c;坚持ing")for j in range(1,11):print(f"送给你第{j}朵玫瑰花")print("小美我喜欢你&…

Hive 的 安装与使用

目录 1 安装 MySql2 安装 Hive3 Hive 元数据配置到 MySql4 启动 Hive5 Hive 常用交互命令6 Hive 常见属性配置 Hive 官网 1 安装 MySql 为什么需要安装 MySql? 原因在于Hive 默认使用的元数据库为 derby&#xff0c;开启 Hive 之后就会占用元数据库&#xff0c;且不与其他客户…

Mindspore 公开课 - prompt

prompt 介绍 Fine-Tuning to Prompt Learning Pre-train, Fine-tune BERT bidirectional transformer&#xff0c;词语和句子级别的特征抽取&#xff0c;注重文本理解Pre-train: Maked Language Model Next Sentence PredictionFine-tune: 根据任务选取对应的representatio…

算法通关村第十六关—滑动窗口经典问题(白银)

滑动窗口经典问题 一、最长子串专题 1.1 无重复字符的最长子串 LeetCode3给定一个字符串s&#xff0c;请你找出其中不含有重复字符的最长子串的长度。例如&#xff1a; 输入&#xff1a;s"abcabcbb" 输出&#xff1a;3 解释&#xff1a;因为无重复字符的最长子串是…

牛客周赛 Round 28 F

以后需要使用map&#xff0c;set进行二分&#xff0c;并且需要知道二分位置的信息时&#xff0c;不妨考虑使用树状数组进行维护 因为简单版本保证了每个数都为正整数&#xff0c;所以前缀和保证了一定的递增的&#xff0c;即有序的&#xff0c;那么考虑固定左端点&#xff0c;去…

多线程并发与并行

&#x1f4d1;前言 本文主要是【并发与并行】——并发与并行的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&…