使用uniapp写一个树形组件,一个树形数据结构,点击树形数据的某个节点,请求下级数据作为这个节点的子集数据
时间: 2024-06-09 22:05:40 浏览: 292
很好用的uni-app节点树组件!
5星 · 资源好评率100%
好的,下面是一个简单的树形组件的实现,包括树形数据结构和请求下级数据。
首先,我们需要定义一个树形数据结构:
```javascript
// 树形节点数据结构
class TreeNode {
constructor(id, name, children = []) {
this.id = id;
this.name = name;
this.children = children;
this.expanded = false; // 是否展开子节点
}
}
```
然后,我们可以使用 `TreeNode` 来构建一个树形数据结构:
```javascript
const treeData = new TreeNode(1, '根节点', [
new TreeNode(2, '节点1', [
new TreeNode(4, '节点1-1'),
new TreeNode(5, '节点1-2'),
]),
new TreeNode(3, '节点2'),
]);
```
接下来,我们可以编写一个树形组件,来显示树形数据结构:
```vue
<template>
<ul>
<li v-for="node in nodes" :key="node.id">
<span @click="toggleExpanded(node)">
<i :class="expandIconClass(node)"></i>
{{ node.name }}
</span>
<Tree :nodes="node.children" v-if="node.expanded" v-show="node.children.length > 0" />
</li>
</ul>
</template>
<script>
import TreeNode from './TreeNode.vue';
export default {
name: 'Tree',
props: {
nodes: {
type: Array,
required: true,
},
},
components: {
TreeNode,
},
methods: {
// 切换节点的展开状态
toggleExpanded(node) {
node.expanded = !node.expanded;
if (node.expanded && node.children.length === 0) {
// 如果展开节点且没有子节点,请求下级数据
this.fetchData(node.id);
}
},
// 请求下级数据
fetchData(id) {
// TODO: 发送请求获取下级数据,并将数据添加到此节点的 children 属性中
},
// 根据节点的展开状态显示不同的图标
expandIconClass(node) {
if (node.children.length === 0) {
return 'icon';
}
return node.expanded ? 'icon-open' : 'icon-close';
},
},
};
</script>
```
其中,`nodes` 是一个数组,表示树形数据结构的根节点,`TreeNode` 是一个递归组件,用来显示子节点。
在组件中,我们定义了一个 `toggleExpanded` 方法,用来切换节点的展开状态。如果节点被展开且没有子节点,我们会调用 `fetchData` 方法,来请求下级数据,并将数据添加到此节点的 `children` 属性中。
下面是一个简单的 demo,可以参考一下:https://codepen.io/zxuqianfang/pen/rNMvLQv
阅读全文