uni-app 实现无限层级,可点击树形图功能
uni-app 实现无限层级,可点击树形图功能
点击一个,其他的都隐藏了 显示点击那个第一个所有元素
3 回复
可以做
解决了
在 uni-app
中实现无限层级的可点击树形图功能,可以通过递归组件和事件机制来实现。以下是一个简单的示例代码,展示如何实现这一功能。
首先,创建一个递归组件 TreeNode.vue
,用于渲染树节点:
<template>
<view class="tree-node">
<view @click="toggle">
<text>{{ node.label }}</text>
<text v-if="node.children && node.children.length">({{ node.expanded ? '-' : '+' }})</text>
</view>
<view v-if="node.expanded" class="children">
<tree-node
v-for="(child, index) in node.children"
:key="index"
:node="child"
@node-click="handleNodeClick"
></tree-node>
</view>
</view>
</template>
<script>
export default {
name: 'TreeNode',
props: {
node: {
type: Object,
required: true
}
},
methods: {
toggle() {
this.node.expanded = !this.node.expanded;
},
handleNodeClick(node) {
this.$emit('node-click', node);
}
}
}
</script>
<style scoped>
.tree-node {
margin-left: 20px;
}
.children {
margin-left: 20px;
}
</style>
然后,在主组件中使用这个递归组件,并管理树的数据:
<template>
<view>
<tree-node
v-for="(node, index) in treeData"
:key="index"
:node="node"
@node-click="onNodeClick"
></tree-node>
</view>
</template>
<script>
import TreeNode from './TreeNode.vue';
export default {
components: {
TreeNode
},
data() {
return {
treeData: [
{
label: 'Node 1',
expanded: false,
children: [
{ label: 'Child 1-1', expanded: false, children: [] },
{ label: 'Child 1-2', expanded: false, children: [] }
]
},
{
label: 'Node 2',
expanded: false,
children: []
}
]
};
},
methods: {
onNodeClick(node) {
console.log('Node clicked:', node);
}
}
}
</script>
在这个示例中,TreeNode.vue
组件是递归的,能够处理任意层级的树节点。每个节点有一个 expanded
属性来控制其子节点的显示和隐藏。点击节点时会触发 toggle
方法,改变 expanded
状态,并触发 node-click
事件。
主组件中,treeData
包含了树形结构的数据。通过 v-for
指令渲染 TreeNode
组件,并监听 node-click
事件,处理节点的点击操作。
这个示例展示了如何在 uni-app
中实现无限层级的可点击树形图功能,通过递归组件和事件机制,你可以轻松扩展和修改这个基础实现。