el-tree回显 包含父节点子节点全部选中问题

文章讲述了在使用Element-UI的树形组件时,如何处理提交权限时全选和半选状态的数据,以及如何在回显时移除后台返回的父节点数据,以避免子节点被错误地选中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做权限的时候,提交数据会把选中与半选中的数据提交给后台,但是在回显时后台返回的数据包含父节点,导致子节点全部选中。解决方法,在回显的时候把后台返回的数据中把所有的父节点给删掉这样就能解决问题。

  1. 提交全选与半选状态数据
<el-tree ref="orgTree" show-checkbox check-on-click-node :data="orgTree" :props="defaultProps" :default-checked-keys="checkedKeys" node-key="id" :expand-on-click-node="false" :destroy-on-close="true" />

 // 全选状态数据
 const checkedKeys = this.$refs.orgTree.getCheckedKeys()
 // 半选状态数据
 const halfSelected = this.$refs.orgTree.getHalfCheckedKeys()
 // 包含全选与半选状态的数据
 const saveCheckedKeys = checkedKeys.concat(halfSelected)
  1. 回显将含有父节点的数据给删除

a. tree 数据结构
在这里插入图片描述
b. 回显数据包含父节点
在这里插入图片描述

echoTree() {    
   this.clearParentOrgCode(this.orgTree)
   // this.orgCodes 后台返回的包含父节点数据 this.parentsCodes 父节点数据
   this.checkedKeys = this.removeArr(this.orgCodes, this.parentsCodes)
 },
 // 递归找寻父节点数据
 clearParentOrgCode(tree) {
   const orgCodes = this.orgCodes
   tree.forEach(item => {
     if (item.children && item.children.length > 0) {
       if (orgCodes.includes(item.id)) {
         this.parentsCodes.push(item.id)
       }
       this.clearParentOrgCode(item.children)
     }
   })
 },
 // 过滤数组
 removeArr(arr1, arr2) {
   return arr1.filter((item) => !arr2.includes(item))
 },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值