el-table异步树形表格与数据懒加载

树形表格数据过多时,可以使用懒加载方式获取子级数据

 
完成效果: 先加载出父级数据, 点击折叠按钮请求子级数据
  

 

代码实现: index.vue
<template>
  <div>
    <el-table
      :data="tableData"
      style="width: 100%;margin-bottom: 20px;"
      row-key="id"
      border
      default-expand-all
      lazy
      :load="loadData"
      :tree-props="{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-column label="操作" width="80">
        <template slot-scope="scope">
          <el-button
            size="mini"
            >详情</el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
import { getTableData } from '@/service/list'

export default {
  data () {
    return {
      tableData: []
    }
  },

  created() {
    this.getData()
  },

  methods: {
    // 获取表格数据
    async getData () {
      const { data } = await getTableData()
      this.tableData = data.map((item, i) => {
        if (i === 2) {
          return {
            ...item,
            hasChildren: false
          }
        }
        return {
          ...item,
          hasChildren: true // 设置true就有折叠图标
        }
      })
    },

    // 获取子级数据
    loadData (row, treeNode, resolve) {
      console.log(row, treeNode)
      getTableData({id: row.id, level: row.level}).then(res => {
        // 懒加载延时效果
        // setTimeout(() => {
        //   resolve(res.data)
        // }, 1000)
        resolve(res.data.map((item, i) => {
          if (i === 1 && row.level < 4) {
            return {
              ...item,
              hasChildren: true
            }
          }
          return item
        }))
      })
    }
  }
}
</script>

 

其他和普通表格一样使用,主要注意这三个属性

 

1. lazy在懒加载中必须设置
2. load子级数据获取方法, 通过resolve返回数据
3. tree-props 懒加载树形数据需要设置hasChildren, 父级数据如果是true,就有展开图标, false就没有展开图标 
posted @ 2022-03-18 17:32  潇湘羽西  阅读(5934)  评论(0编辑  收藏  举报