el-table 使用懒加载 加载远程children数据
时间: 2023-07-05 14:29:55 浏览: 167
你可以使用 `expand-row` 事件来实现 el-table 的懒加载,具体步骤如下:
1. 在 el-table 中设置 `:tree-props="{lazy:true, load:loadChildren}"`,其中 `lazy:true` 表示启用懒加载,`load:loadChildren` 表示加载远程子节点数据的方法为 `loadChildren`。
2. 在 `methods` 中定义 `loadChildren` 方法,该方法接收三个参数:`node` 表示当前节点,`resolve` 表示加载完成后的回调函数,`reject` 表示加载失败后的回调函数。
3. 在 `loadChildren` 方法中通过远程请求获取当前节点的子节点数据,然后将数据传给 `resolve` 函数。
4. 在 `expand-row` 事件中调用 `loadChildren` 方法,将当前节点和回调函数作为参数传递进去。
下面是一个示例代码:
```html
<template>
<el-table
:data="tableData"
:tree-props="{lazy:true, load:loadChildren}"
@expand-row="expandRow"
>
<el-table-column prop="name" label="Name"></el-table-column>
<el-table-column prop="age" label="Age"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: []
}
},
methods: {
loadChildren(node, resolve, reject) {
// 发送远程请求获取当前节点的子节点数据
axios.get(`/api/children?id=${node.id}`).then(response => {
resolve(response.data)
}).catch(error => {
reject(error)
})
},
expandRow(row, expandedRows) {
// 调用 loadChildren 方法加载子节点数据
this.loadChildren(row, children => {
row.children = children
expandedRows.push(row)
})
}
}
}
</script>
```
在上面的示例中,我们通过 `axios` 发送了一个远程请求来获取子节点数据,并通过 `resolve` 函数将数据传递给 el-table 组件。在 `expand-row` 事件中,我们调用了 `loadChildren` 方法来加载子节点数据,并将回调函数 `children => {row.children = children; expandedRows.push(row)}` 作为参数传递进去。在回调函数中,我们将子节点数据赋值给当前节点的 `children` 属性,并将当前节点加入到 `expandedRows` 数组中,以便展开当前节点时可以正常显示子节点。
阅读全文