element ui树形表格数据懒加载

本文详细介绍了如何在ElementUI中实现表格的懒加载功能。通过设置`row-key`、`data`、`load`等属性,结合自定义的`getChildrens`方法,实现了点击表格行时按需加载子数据的功能。当`hasChildren`属性为true时,数据项可展开,否则表示无子数据。在组件的`created`钩子中请求顶层数据,并在`load`回调中处理子级数据的加载,确保了高效的数据显示。
摘要由CSDN通过智能技术生成

element ui所谓的表格懒加载就是一次只展示一层的数据
在这里插入图片描述

 <el-table
    :data="tableData"
    style="width: 100%;margin-top: 10px;"
    row-key="id"
    border
    lazy
    :load="getChildrens"
    :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column prop="name" label="名称" width = '300' ></el-table-column>
</el-table>

row-key是这个表格必须要的 key就是唯一标识 这个有id的话肯定是用id的
然后就是data属性 这个通常做第一层数据的来源
load方法就是每次点击展开时出发的方法

先要在第一个生命周期中请求最顶级的数据 并给和表格data属性绑定的tableData赋值
item.hasChildren属性为true 这条数据的前面就会出现那个表示可以展开的小箭头 为false 则不展示

created(){
    getSystemMenuList(0).then((src) => {
       if(src.status == 200) {
             this.tableData = src.data.map((item, index) =>{
                 item.hasChildren = true;
                 return item
             })
         }
     })
}

然后我们来编写load对应的getChildrens函数

getChildrens(tree,treeNode, resolve){
   getSystemMenuList(tree.id).then((response) => {
        var data
        if(response.data.length&&response.data.length > 0){
            let data = response.data.map((item, index) =>{
                item.hasChildren = true;
                return item
            })
            resolve(data)
        }else{
            tree.hasChildren = false
        }
    });
},

这个函数时在当某一条数据前面的展开小箭头被点击时触发的
接收三个参数
第一个是触发这个事件的那条数据
第二个我们不需要使用
第三个是返回给他的子数据
这里我们通过第一个参数就是触发事件的那条数据的id去调接口
然后判断接口返回的数据如果不是空的 则将他的子集循环 将他们的hasChildren 也赋为true 表示数据项是可以接着展开的
然后将调出来的子数据扔给resolve 这样他就会出现成为触发事件数据的子集

如果接口没有调出数据 为空 则这个数据是没有子集的 就拿到这个数据本身 第一个参数 将他的hasChildren赋为false 表示这条数据是无法展开的

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Element UI提供的树形表格组件支持懒加载,可以在需要时异步加载子节点数据,避免一次性加载过多数据导致页面卡顿。 以下是实现懒加载的基本步骤: 1. 设置树形表格的 lazy 属性为 true,表示开启懒加载。 2. 在树形表格的 data 属性中定义一个空数组作为根节点的子节点数据。 3. 在树形表格的 load 方法中,根据节点的 level 和 key(节点的唯一标识符)异步加载子节点数据,并将数据添加到对应的节点的 children 属性中。 4. 在树形表格的 render-content 属性中,根据节点的 children 属性判断是否需要显示展开图标,并根据节点的 loading 状态显示加载中的提示或子节点数据。 以下是一个简单的示例代码: ``` <template> <el-tree :data="data" :lazy="true" :load="load" :render-content="renderContent"> <span class="custom-tree-node" slot-scope="{ node, data }"> {{ data.name }} </span> </el-tree> </template> <script> export default { data() { return { data: [{ id: 1, name: 'Node 1', children: [] // 子节点数据为空数组 }] } }, methods: { load(node, resolve) { // 异步加载子节点数据 setTimeout(() => { const level = node.level + 1 const key = node.data.id const children = [{ id: key * 10 + 1, name: `Node ${key * 10 + 1}`, children: [] }, { id: key * 10 + 2, name: `Node ${key * 10 + 2}`, children: [] }] node.data.children = children // 将数据添加到节点的 children 属性 resolve(children) }, 1000) }, renderContent(h, { node, data, store }) { // 根据节点的 children 属性判断是否需要显示展开图标 const hasChildren = data.children && data.children.length > 0 const isLoading = node.loading // 节点的 loading 状态 return ( <span class="custom-tree-node"> { data.name } { hasChildren ? <span class="el-tree-node__expand-icon el-icon-arrow-right" onClick={ () => store.load(node) } ></span> : null } { isLoading ? <span class="el-tree-node__loading-icon el-icon-loading"></span> : null } </span> ) } } } ``` 在上述示例中,load 方法通过 setTimeout 模拟异步加载子节点数据的过程,将数据添加到节点的 children 属性中。renderContent 方法根据节点的 children 属性和 loading 状态显示展开图标和加载中的提示或子节点数据
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值