vue实现多级表格
Vue 实现多级表格的方法
使用 Vue 实现多级表格可以通过递归组件或第三方库实现。以下是两种常见方法:
递归组件实现多级表格
递归组件适合处理嵌套数据结构,例如树形表格。以下是一个基础实现示例:
<template>
<table>
<thead>
<tr>
<th v-for="col in columns" :key="col.key">{{ col.title }}</th>
</tr>
</thead>
<tbody>
<tree-table-row
v-for="(item, index) in data"
:key="index"
:item="item"
:columns="columns"
:level="0"
/>
</tbody>
</table>
</template>
<script>
import TreeTableRow from './TreeTableRow.vue'
export default {
components: { TreeTableRow },
props: {
data: Array,
columns: Array
}
}
</script>
创建递归组件 TreeTableRow.vue:
<template>
<tr :style="{ paddingLeft: level * 20 + 'px' }">
<td v-for="col in columns" :key="col.key">
{{ item[col.key] }}
</td>
</tr>
<tree-table-row
v-if="item.children && item.children.length"
v-for="(child, index) in item.children"
:key="index"
:item="child"
:columns="columns"
:level="level + 1"
/>
</template>
<script>
export default {
name: 'TreeTableRow',
props: {
item: Object,
columns: Array,
level: Number
}
}
</script>
使用第三方库
对于更复杂的需求,可以考虑以下 Vue 表格库:
-
Element UI 的
el-table支持树形数据:<el-table :data="tableData" row-key="id" default-expand-all :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> <el-table-column prop="name" label="名称"></el-table-column> </el-table> -
VxeTable 提供强大的树表格功能:
<vxe-table :data="tableData" :tree-config="{children: 'children'}"> <vxe-column field="name" title="名称" tree-node></vxe-column> </vxe-table> -
AG Grid Vue 支持企业级树形表格:
this.gridOptions = { getDataPath: function(data) { return data.orgHierarchy; }, autoGroupColumnDef: { headerName: "Organisation Hierarchy" } }
数据格式要求
无论采用哪种方法,数据格式通常需要包含嵌套结构:
data: [
{
id: 1,
name: 'Parent',
children: [
{ id: 2, name: 'Child' }
]
}
]
性能优化建议
对于大型数据集,应考虑:
- 虚拟滚动(如使用
vue-virtual-scroller) - 延迟加载子节点
- 分页显示数据
- 使用
v-show替代v-if控制展开/折叠
交互功能扩展
可以添加以下功能增强用户体验:

- 展开/折叠图标控制
- 行选择功能
- 拖拽排序
- 动态加载子节点
- 多级表头支持
以上方法可根据具体项目需求选择或组合使用。递归组件适合轻量级需求,而第三方库则能提供更完善的功能和更好的性能。






