vue实现树形导航
vue实现树形导航的方法
使用Vue实现树形导航可以通过递归组件或第三方库完成。以下是几种常见方法:
递归组件实现
创建递归组件TreeNav,通过v-for遍历子节点并嵌套自身:
<template>
<ul>
<li v-for="item in treeData" :key="item.id">
{{ item.name }}
<TreeNav v-if="item.children" :treeData="item.children"/>
</li>
</ul>
</template>
<script>
export default {
name: 'TreeNav',
props: ['treeData']
}
</script>
使用第三方库
安装vue-tree-navigation等专门库简化实现:
npm install vue-tree-navigation
引入后直接使用组件:
<template>
<vue-tree-navigation :items="treeData"/>
</template>
动态加载数据
结合API异步加载子节点数据:
methods: {
loadChildren(parentId) {
fetch(`/api/nodes?parent=${parentId}`)
.then(res => res.json())
.then(data => {
this.$set(this.treeData, 'children', data)
})
}
}
样式优化
添加CSS实现折叠效果:
li > ul {
display: none;
padding-left: 20px;
}
li.active > ul {
display: block;
}
通过@click切换状态类:
<li @click="item.active = !item.active" :class="{active: item.active}">
完整示例结构
数据格式建议:
treeData: [
{
id: 1,
name: 'Parent',
children: [
{id: 2, name: 'Child'}
]
}
]
通过以上方法可构建可交互的树形导航,支持无限层级嵌套和动态加载。实际项目中可根据需求选择纯组件实现或结合状态管理库。







