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的值必须是唯一的,不然等会懒加载数据的时候,会缓存,界面不会更新。下面看看详细实现代码:

element tree树形展示懒加载后数据如何添加到指定父节点 element ui 树形表格懒加载_vue


element tree树形展示懒加载后数据如何添加到指定父节点 element ui 树形表格懒加载_表数据_02


这样可以实现每一行都是树形表,如果不是每一行都是树形表,可以对行数据就行过滤处理,为需要的行添加hasChildren: true,在这里的时候,就对主表行key进行了处理,保证了row-key的值是唯一的。

element tree树形展示懒加载后数据如何添加到指定父节点 element ui 树形表格懒加载_vue_03


这里是对子表的数据增加了key值,并且保证子表数据的row-key值是唯一的。因为有的数据主表显示了,子表不需要显示了,所以有了下面两行代码。这里一定要注意的是,子表数据一定要放在resolve()中,这样才能拿到子表数据。

  1. 现在来看看实现效果吧:
  2. 总结: 之所以会出现数据缓存或者说是组件缓存,是取决row-key的值,只要保证每次row-key的值是唯一的,就可以解决页面数据不改变的问题。