vue实现 treegrid
Vue 实现 TreeGrid 的方法
使用第三方组件库
Element UI、Ant Design Vue 等主流组件库提供了成熟的 TreeTable 或 TreeGrid 组件,可直接集成使用。
安装 Element UI:
npm install element-ui
引入 TreeTable 组件:
import { ElTree } from 'element-ui'
Vue.use(ElTree)
模板示例:
<el-tree
:data="treeData"
show-checkbox
node-key="id"
:props="defaultProps">
</el-tree>
数据格式要求:
treeData: [{
id: 1,
label: '一级节点',
children: [{
id: 2,
label: '二级节点'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
}
自定义递归组件实现
创建递归组件 TreeGrid.vue:
<template>
<table>
<tr v-for="node in data" :key="node.id">
<td>{{ node.label }}</td>
<td v-if="node.children">
<tree-grid :data="node.children"/>
</td>
</tr>
</table>
</template>
<script>
export default {
name: 'TreeGrid',
props: ['data']
}
</script>
使用组件:

<tree-grid :data="treeData"/>
使用 vue-table-with-tree-grid 插件
安装专用插件:
npm install vue-table-with-tree-grid
基本用法:
import Vue from 'vue'
import TreeGrid from 'vue-table-with-tree-grid'
Vue.use(TreeGrid)
模板配置:
<tree-grid
:columns="columns"
:tree-structure="true"
:data-source="dataSource"/>
实现展开/折叠功能
添加展开控制:

methods: {
toggleExpand(row) {
this.$set(row, '_expanded', !row._expanded)
}
}
样式控制:
.tree-node {
padding-left: 20px;
position: relative;
}
.toggle-icon {
position: absolute;
left: 0;
cursor: pointer;
}
性能优化建议
大数据量时采用虚拟滚动:
import VirtualTree from 'vue-virtual-scroll-tree'
懒加载实现:
loadNode(node, resolve) {
if (node.level === 0) {
return resolve(rootNodes)
}
fetchChildren(node.id).then(res => resolve(res))
}
注意事项
树形数据需要包含唯一标识字段和 children 字段,建议结构:
{
id: Number|String,
label: String,
children: Array,
// 其他业务字段...
}
对于复杂操作(拖拽排序、动态增删等),建议优先考虑成熟组件库的实现方案。






