樹形表格數據過多時,可以使用懶加載方式獲取子級數據
完成效果: 先加載出父級數據, 點擊折疊按鈕請求子級數據


代碼實現: 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就沒有展開圖標