vue实现树形标题
Vue 实现树形标题的方法
使用递归组件
递归组件是处理树形结构的常见方法。创建一个组件,该组件能够调用自身来渲染子节点。
<template>
<div>
<div v-for="node in treeData" :key="node.id">
<span>{{ node.title }}</span>
<tree-node v-if="node.children" :treeData="node.children"></tree-node>
</div>
</div>
</template>
<script>
export default {
name: 'TreeNode',
props: {
treeData: {
type: Array,
required: true
}
}
}
</script>
数据结构示例
树形结构通常是一个嵌套的对象数组,每个节点包含标题和可能的子节点。

const treeData = [
{
id: 1,
title: 'Parent 1',
children: [
{
id: 2,
title: 'Child 1',
children: []
},
{
id: 3,
title: 'Child 2',
children: []
}
]
}
]
动态加载子节点
对于大型树形结构,可以动态加载子节点以提高性能。
<template>
<div>
<div v-for="node in treeData" :key="node.id">
<span @click="toggleChildren(node)">{{ node.title }}</span>
<tree-node
v-if="node.showChildren && node.children"
:treeData="node.children"
></tree-node>
</div>
</div>
</template>
<script>
export default {
name: 'TreeNode',
props: {
treeData: {
type: Array,
required: true
}
},
methods: {
toggleChildren(node) {
node.showChildren = !node.showChildren
}
}
}
</script>
使用第三方库
如果项目允许使用第三方库,可以考虑使用 vue-tree-list 或 vue-json-tree-view 等现成解决方案。

npm install vue-tree-list
<template>
<vue-tree-list
:model="treeData"
@click="onClick"
></vue-tree-list>
</template>
<script>
import { VueTreeList } from 'vue-tree-list'
export default {
components: {
VueTreeList
},
data() {
return {
treeData: { ... }
}
},
methods: {
onClick(node) {
console.log(node)
}
}
}
</script>
样式定制
为树形标题添加样式,使其更具可读性和交互性。
.tree-node {
margin-left: 20px;
cursor: pointer;
}
.tree-title {
padding: 5px;
border-radius: 3px;
}
.tree-title:hover {
background-color: #f0f0f0;
}
事件处理
为树形标题添加点击事件,实现展开/折叠功能或其他交互。
<template>
<div>
<div
v-for="node in treeData"
:key="node.id"
class="tree-node"
>
<span
class="tree-title"
@click="handleClick(node)"
>
{{ node.title }}
</span>
<tree-node
v-if="node.expanded && node.children"
:treeData="node.children"
></tree-node>
</div>
</div>
</template>
<script>
export default {
methods: {
handleClick(node) {
this.$set(node, 'expanded', !node.expanded)
}
}
}
</script>






