vue实现树形列表
Vue实现树形列表的方法
使用Vue实现树形列表可以通过递归组件或第三方库来完成。以下是几种常见的方法:
递归组件实现
创建一个递归组件,用于渲染树形结构的数据:

<template>
<ul>
<li v-for="item in treeData" :key="item.id">
{{ item.name }}
<tree-list v-if="item.children" :treeData="item.children"></tree-list>
</li>
</ul>
</template>
<script>
export default {
name: 'TreeList',
props: {
treeData: {
type: Array,
required: true
}
}
}
</script>
使用时传入树形结构数据:
<template>
<tree-list :treeData="treeData"></tree-list>
</template>
<script>
import TreeList from './TreeList.vue'
export default {
components: {
TreeList
},
data() {
return {
treeData: [
{
id: 1,
name: '节点1',
children: [
{
id: 2,
name: '子节点1'
}
]
}
]
}
}
}
</script>
使用Vue插件
安装vue-tree-list插件:

npm install vue-tree-list
在组件中使用:
<template>
<vue-tree-list
:model="treeData"
default-tree-node-name="节点"
default-leaf-node-name="叶子"
></vue-tree-list>
</template>
<script>
import { VueTreeList } from 'vue-tree-list'
export default {
components: {
VueTreeList
},
data() {
return {
treeData: {
name: '根节点',
children: [
{
name: '子节点1',
children: []
}
]
}
}
}
}
</script>
使用Element UI的Tree组件
如果项目中使用Element UI,可以直接使用其Tree组件:
<template>
<el-tree
:data="treeData"
:props="defaultProps"
></el-tree>
</template>
<script>
export default {
data() {
return {
treeData: [{
label: '一级节点',
children: [{
label: '二级节点'
}]
}],
defaultProps: {
children: 'children',
label: 'label'
}
}
}
}
</script>
注意事项
- 递归组件需要设置
name属性才能在模板中调用自身 - 树形数据结构需要包含
children属性来表示子节点 - 对于大型树结构,考虑使用虚拟滚动优化性能
- 如果需要交互功能(如展开/折叠),可以在组件中添加状态管理






