element-ui懒加载实现树形表格以及如何解决树形表格懒加载缓存问题

  1. 树形表格的实现问题,官网都是静态数据,实际开发过程中,数据都是动态请求过来的,导致初学者在使用过程中会踩很多坑,就像我,这里记录一下树形表格实现中出现的一些问题。

 我们先来看官网中给出的树形表格懒加载实现的例子:
<template>
<div>
  <el-table
    :data="tableData1"
    style="width: 100%"
    row-key="id"
    border
    lazy
    :load="load"
    :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
    <el-table-column
      prop="date"
      label="日期"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="180">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址">
    </el-table-column>
  </el-table>
</div>
</template>
<script>
  export default {
    data() {
      return {
        tableData1: [{
          id: 1,
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1518 弄'
        }, {
          id: 2,
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1517 弄'
        }, {
          id: 3,
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1519 弄',
          hasChildren: true
        }, {
          id: 4,
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀区金沙江路 1516 弄'
        }]
      }
    },
    methods: {
      load(tree, treeNode, resolve) {
        setTimeout(() => {
          resolve([
            {
              id: 31,
              date: '2016-05-01',
              name: '王小虎',
              address: '上海市普陀区金沙江路 1519 弄'
            }, {
              id: 32,
              date: '2016-05-01',
              name: '王小虎',
              address: '上海市普陀区金沙江路 1519 弄'
            }
          ])
        }, 1000)
      }
    },
  }
</script>

要实现树形表格懒加载,当前表格的row必须要包含hasChildren字段,当我们动态请求主表行的数据时,可以对数据进行处理,我当时做的是库存明细表,所以每行都必须要树形结构,我们可以对获取的表格数据进行处理,每一行的数据都加上hasChildren: true,这里还要注意的地方是,row-key的值必须是唯一的,不然等会懒加载数据的时候,会缓存,界面不会更新。下面看看详细实现代码:
在这里插入图片描述
在这里插入图片描述
这样可以实现每一行都是树形表,如果不是每一行都是树形表,可以对行数据就行过滤处理,为需要的行添加hasChildren: true,在这里的时候,就对主表行key进行了处理,保证了row-key的值是唯一的。
在这里插入图片描述
这里是对子表的数据增加了key值,并且保证子表数据的row-key值是唯一的。因为有的数据主表显示了,子表不需要显示了,所以有了下面两行代码。这里一定要注意的是,子表数据一定要放在resolve()中,这样才能拿到子表数据。

  1. 现在来看看实现效果吧:
    在这里插入图片描述
  2. 总结: 之所以会出现数据缓存或者说是组件缓存,是取决row-key的值,只要保证每次row-key的值是唯一的,就可以解决页面数据不改变的问题。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI 中的 Tree 组件支持,也就是说只有当节点被展开时才会去该节点下的子节点数据。这在处理大量数据时能够提高性能和用户体验。 要使用,需要为 Tree 组件设置 load 方法,该方法会在节点展开时被调用。load 方法接收一个参数 node,表示当前被展开的节点。在 load 方法中,我们可以通过异步请求获取该节点下的子节点数据,并使用 resolve 方法将数据返回给 Tree 组件。 示例代码如下: ```html <template> <el-tree :data="data" :load="loadData"></el-tree> </template> <script> export default { data() { return { data: [ { label: '一级节点', children: true // 表示该节点有子节点,但未 } ] } }, methods: { loadData(node, resolve) { // 异步请求获取子节点数据 setTimeout(() => { const children = [ { label: '二级节点1' }, { label: '二级节点2' } ] // 将子节点数据返回给 Tree 组件 resolve(children) }, 1000) } } } </script> ``` 在上述示例中,我们通过设置 children 属性为 true 来表示该节点有子节点,但未。当该节点被展开时,会调用 loadData 方法,该方法会通过异步请求获取子节点数据,并使用 resolve 方法将数据返回给 Tree 组件。返回的数据会自动渲染为该节点的子节点。 需要注意的是,load 方法需要返回一个 Promise 或在回调函数中调用 resolve 方法。如果返回的是 Promise,则需要在 Promise 中 resolve 子节点数据,例如: ```javascript loadData(node) { return new Promise(resolve => { // 异步请求获取子节点数据 setTimeout(() => { const children = [ { label: '二级节点1' }, { label: '二级节点2' } ] // 将子节点数据返回给 Tree 组件 resolve(children) }, 1000) }) } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值