树组件 el-tree 数据回显

树组件 el-tree 数据回显

树型结构的数据回显问题:

这里我只放了核心代码,主要是如何获取选中的树节点的id集合如何根据树节点的id集合回显数据
大家根据需要自行更改!

	<el-tree 
		ref="authorityRef" 
		node-key="id" 
		:data="allAuthorityList" 
		show-checkbox 
		default-expand-all 
		empty-text="加载中,请稍候" 
		:props="defaultProps"> 
	</el-tree>
	const authorityRef = ref(ElTree)
	const defaultProps = {
		children: 'childrenList',
		label: 'name'
	}
	//1、如何获取选中的树节点的id集合!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	
	//我这里是通过Tree 组件的`getCheckedNodes`方法先获取到当前选中节点的数组然后再取其id值
	const checkedMenuAllIds = authorityRef.value.getCheckedNodes(false, true).map((node: any) => node.id)
	
	//如果传参要求只要最后一级的id值,可以再过滤处理一下
	const checkedMenuAllIds: number[] = authorityRef.value
			.getCheckedNodes(false, true)
			.filter((node) => !node.childrenList || node.childrenList.length === 0)
			.map((node) => Number(node.id)) //只传最后一级的id

	//2、如何根据树节点的id集合回显数据!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	
	//首先肯定是获取到树结构数据,为确保DOM更新后才调用setChecked,我这里使用nextTick
	//获取成功后,我这里是通过Tree 组件的`setChecked`方法设置节点是否被选中
	// 获取树级列表
	const { executeBody: fetGetCheckLibraryTree } = useRequest(api_get_checkLibrary_Tree(), {
		onSuccess(res: any) {
			allAuthorityList.value = res
			//注意:确保数组里面的id类型与树形结构中的id类型匹配!
			//这里的props.checkedAllId就是树节点的id集合,例如[ "1","574850805256267","574850805260359","574850805260357","574850805260361"]
			if (props.checkedAllId) {
				// 回显已拥有的结构
				nextTick(() => {
					props.checkedAllId.forEach((id) => {
						authorityRef.value?.setChecked(id, true, false)//核心代码就这一句!
					})
				})
			}
		}
	})

如果后端返回的数据不是树节点的id集合组成的数组结构,这里我的后端给我的是树型结构,我是通过递归处理的

	// 递归函数来提取 checkIds
	function extractCheckIds(checkIds, result: string[]) {
		checkIds.forEach((checkId) => {
			result.push(checkId.id);
			if (checkId.childrenList && checkId.childrenList.length > 0) {
				extractCheckIds(checkId.childrenList, result);
			}
		});
	}

	//使用时
	if (res.checkIds && res.checkIds.length > 0) {
		const checkedAllIds: string[] = [];
		extractCheckIds(res.checkIds,checkedAllIds);
	}

实现效果:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值