Vue多次调用el-tree懒加载

博客介绍了在Vue里使用el-tree树形结构进行懒加载的方法。当同一页面存在多个树形结构时,可采用数据data与懒加载结合的方式,以此避免多次调用接口。

Vue中使用el-tree树形结构懒加载

当同一个页面有多个树形结构时,使用数据data和懒加载结合的方法,避免多次调用接口。

<el-tree :data="treeData" :props="insprops" :key="treeKey" ref="tree" @node-expand="getNodeInfo" @node-click="handleNodeClick" :load="loadNode" lazy node-key="id" :filter-node-method="filterNode"></el-tree>
//在created中调用一次接口,获取树形结构数据
 created(){
    this.connectAxios()
},
methods:{
    loadNode(node,resolve){
	    if (node.level == 0) {
	  	    return resolve(this.treeData)
	    }else{
		    var mid = node.data.groupId === undefined?'1_01':node.data.groupId
		     this.connectAxios(mid,node,resolve)
	    }
    }
}

 

### Vue3 中实现 `el-tree` 组件的懒加载展开功能 在 Vue3 的项目中,可以通过配置 `<el-tree>` 组件的相关属性来实现树形结构的懒加载功能。以下是具体的实现方法: #### 1. 配置基础模板 通过设置 `lazy` 和 `load` 属性,可以启用懒加载模式并定义异步数据加载逻辑。 ```html <template> <div> <!-- 输入框用于过滤 --> <el-input placeholder="请输入搜索内容" v-model="filterText" class="inputStyle" clearable @input="handleFilter" /> <!-- 树组件 --> <el-tree :data="treeData" node-key="id" :props="defaultProps" :filter-node-method="filterNode" ref="treeRef" :expand-on-click-node="false" lazy :load="loadNode" class="tree_Style" > </el-tree> </div> </template> ``` --- #### 2. 定义响应式数据 在 `setup()` 或组合式 API 中初始化必要的状态变量。 ```javascript <script setup> import { ref, watch } from 'vue'; const treeData = ref([]); // 初始为空数组 const filterText = ref(''); // 过滤输入框的内容 const defaultProps = { label: 'name', // 节点显示字段名 children: 'children', isLeaf: 'leaf' // 是否为叶子节点 }; const treeRef = ref(null); // 处理过滤操作 function handleFilter(value) { treeRef.value.filter(value); } // 自定义过滤函数 function filterNode(value, data) { if (!value) return true; return data.name.includes(value); } </script> ``` --- #### 3. 实现懒加载逻辑 (`load`) `load` 方法会在每节点被展开时触发,需返回一个 Promise 并调用后端接口获取子节点数据。 ```javascript async function loadNode(node, resolve) { try { const params = { id: node.level === 0 ? '' : node.data.id, keyword: filterText.value || '' }; const response = await fetchLazyTreeData(params); // 假设这是封装好的请求方法 if (response.success && Array.isArray(response.data)) { resolve(response.data.map(item => ({ ...item, leaf: !item.children?.length // 动态判断是否为叶子节点 }))); } } catch (error) { console.error(error); resolve([]); } } // 模拟后端接口请求 async function fetchLazyTreeData({ id, keyword }) { const url = `/api/tree-data?id=${id}&keyword=${encodeURIComponent(keyword)}`; const res = await fetch(url).then(r => r.json()); return res; } ``` --- #### 4. 整合样式与交互 为了提升用户体验,可以在 CSS 文件中自定义树组件的样式。 ```css <style scoped> .inputStyle { margin-bottom: 10px; width: 100%; } .tree_Style ::v-deep(.el-tree-node__content) { height: 36px; line-height: 36px; } </style> ``` --- ### 总结 以上代码展示了如何基于 Vue3 和 Element Plus 实现 `el-tree` 的懒加载功能。核心在于: - 使用 `lazy` 和 `load` 属性动态加载子节点。 - 结合 `filter-node-method` 提供实时过滤支持[^1]。 - 后端接口负责提供分层数据,并根据关键词筛选结果。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值