记录element-plus树型表格的bug

2024-02-05 21:12

本文主要是介绍记录element-plus树型表格的bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

  • 当禁止1、2级选中时,即使子节点名字是children,全选框对一级也失效
  • 如果后端数据结构子节点是其他名字,比如thisChildList就有bug,
  1. 点击全选后,只有一级可以选到,二、三级选不到,也就是全选框只能和一级联动
  2. 二级的多选框选不到三级的;反过来,三级的数据全选,父级不受影响
    如果用children,
  3. 全选框可以选中一级、二三级,也可以取消;但反过来二、三级影响不到全选框,三级影响不到父级
  • 如果数据结构是children
父对于子选中取消
全选框对于一级okok
全选框 对于二级okok
全选框 对于三级okok
一级对于二级okok
一级对于三级okok
二级对于三级okok
子对于父选中取消
一级对于全选框okok
二级对于全选框NoNo
三级对于全选框NoNO
二级对于一级NoNO
三级对于一级NONO
三级对于二级NoNo
  const tableData = [{id: 1,date: '2016-05-02',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',selectedAble: true,thisChildList: [{id: 131,date: '2016-05-01',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',selectedAble: true,thisChildList: [...]},]

解决

参考大佬的代码
传送门


// 递归const setChildren = (children, type) => {// 编辑多个子层级children.map((j) => {toggleSelection(j, type)if (j.thisChildList) {setChildren(j.thisChildList, type)}})}// 选中父节点时,子节点一起选中取消const select = (selection, row) => {console.log('select!!')const hasSelect = selection.some((el) => {return row.id === el.id})console.log('hasSelect', hasSelect)if (hasSelect) {if (row.thisChildList) {// 解决子组件没有被勾选到setChildren(row.thisChildList, true)}} else {// 解决点击父组件取消选中,子级也跟着取消if (row.thisChildList) {setChildren(row.thisChildList, false)}}}const toggleSelection = (row, select) => {if (row) {// 通过使用 nextTick 来延迟执行后续的代码,以确保在更新表格的选中状态之前先进行其他可能的 DOM 更新nextTick(() => {// 这里 && 的作用是 如果左侧表达式的值为真值,则返回右侧表达式的值;// 否则,返回左侧表达式的值。如果左侧表达式的值为假值,则整个表达式的结果也为假值。// toggleRowSelection用于多选表格,切换某一行的选中状态, 如果使用了第二个参数,则可直接设置这一行选中与否multipleTable.value && multipleTable.value.toggleRowSelection(row, select)// 也可以写成 multipleTable.value?.toggleRowSelection(row, select)})}}// 选择全部 默认全选框只能影响第一级的 二、三等级别不会联动//   当用户手动勾选全选 Checkbox 时触发的事件const selectAll = (selection) => {console.log('selectAll——————selection', selection)// tabledata第一层只要有在selection里面就是全选const isSelect = selection.some((el) => {const tableDataIds = tableData.map((j) => j.id)return tableDataIds.includes(el.id)})// tableDate第一层只要有不在selection里面就是全不选const isCancel = !tableData.every((el) => {const selectIds = selection.map((j) => j.id)return selectIds.includes(el.id)})if (isSelect) {selection.map((el) => {if (el.thisChildList) {// 解决子组件没有被勾选到setChildren(el.thisChildList, true)}})}if (isCancel) {tableData.map((el) => {if (el.thisChildList) {// 解决子组件没有被勾选到setChildren(el.thisChildList, false)}})}}//   const selectionChange = (val) => {//     console.log(val)//   }

但仍然有问题,比如3级节点选中,他的父级节点无动于衷,不会联动

解决2

或者把thisChildList 改成children

function renameChildListToChildren(data) {if (!Array.isArray(data)) {return data;}return data.map(item => {const newItem = { ...item };if (newItem.thisChildList) {newItem.children = renameChildListToChildren(newItem.thisChildList);delete newItem.thisChildList;}return newItem;});
}const newData = renameChildListToChildren(tableData);
console.log(newData);

但是官方也有这个问题
在这里插入图片描述
二级不能影响一级的选中,有bug

这篇关于记录element-plus树型表格的bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682185

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元