el-tree 数据懒加载实现异步搜索

坐标: 北京 天气: 晴 有风 温度适宜

背景

Element UI el-tree 官方对于数据量大希望异步加载的数据 支持懒加载, 懒加载会依赖 load 方法,自动触发加载. 同时 官方的搜索只能过滤展示出已经加载的数据 , 而需求中的搜索需要重新请求后端 获取到新的结果.

难点

触发搜索后,如何更新异步加载的数据,进行展示,并进行后面的异步加载,因为el-tree 懒加载情况下设置 data 是不会生效的.

解决

更新数据不生效 从懒加载方法入手, 想办法清空懒加载展示的内容, loadNode(node, resolve); 在第一次加载时, 等效于根node, 可以清空其childNodes 此时 el-tree 的数据显示将被更新, 清空后可以调用手动调用 load方法,根据实际需求 , resolve() 返回对应的数据即可.

实现

1. el-tree 设置 lazy 及 load 方法

            <el-tree
                ref="xxx"
				node-key='xx'
				:props="xxx"
				:current-node-key="xxx"
				show-checkbox  
                :default-checked-keys="xxx"
				:filter-node-method="xxx"
				lazy
				:load="loadNode"
				@node-click="xxx"
				@check="xxx"
				@check-change="xxx"
			>

2. 在第一次加载目录时 保存 node 及 resolve 以便在搜索时可以清空 手动调用loadNode

       const loadNode = (node, resolve) => {
			if (node.level === 0) {
				lazyNode = node;
				lazyResolve = resolve;
			}
            // 实际的API请求
			xxx(node, resolve);
		};

3.触发搜索后 清空原数据 lazyNode.childNodes = []; 因为要不同的接口逻辑 所以设置了标识

       // 搜索
		const handleSearchChange = (val) => {
			if (lazyNode) {
				lazyNode.childNodes = [];
				searchFlag.value = true;
				loadNode(lazyNode, lazyResolve);
			}
		};

4. 根据标识 在loadNode 中调用搜索的接口进行resolve 即

            // 不区分权限获取目录
			xxx[apiName](params).then(res => {
				if (res.code === 0) {
					if (resolve) {
						// 将当前node取消选中 其选中状态由子节点确定
						resolve(res.data);
					}
				} else {
					xxx;				
                }
			});

代码还没有精进 需要多测试.

积跬步 至千里.

实现 el-tree懒加载功能,你可以按照以下步骤进行操作: 1. 配置数据源:首先,你需要配置一个异步数据源,用于提供懒加载数据。这可以是一个后端接口,返回符合 el-tree 要求的节点数据。 2. 设置懒加载属性:在 el-tree 组件中,设置 `lazy` 属性为 `true`,开启懒加载功能。 3. 实现加载方法:创建一个方法,用于根据节点的信息从数据源中获取子节点数据。可以使用 `load` 属性来指定这个方法。这个方法应该接收一个参数,代表当前节点的数据对象,并返回一个 Promise 对象来异步获取子节点数据。 4. 更新节点数据:在加载方法中,通过调用 `resolve` 方法将获取到的子节点数据传递给它,以更新节点的子节点。 这是一个简单的示例代码,演示了如何实现 el-tree懒加载: ```vue <template> <el-tree :data="treeData" :load="loadTreeData" :lazy="true"></el-tree> </template> <script> export default { data() { return { treeData: [] // 初始化树数据为空 } }, methods: { loadTreeData(node, resolve) { // 调用异步接口获取子节点数据 axios.get('/api/getChildren', { params: { nodeId: node.id } }) .then(response => { const children = response.data.children; // 更新节点的子节点数据 resolve(children); }) .catch(error => { console.error('Failed to load tree data:', error); }); } } } </script> ``` 在上述示例中,`loadTreeData` 方法使用 axios 发起异步请求,根据当前节点的 id 获取子节点数据,并将数据通过 `resolve` 方法传递给 el-tree 组件,以更新节点的子节点。 你可以根据自己的实际情况,调整数据源和加载方法的实现。希望这个示例能帮助你实现 el-tree懒加载功能!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值