uni-app 实现无限层级,可点击树形图功能

发布于 1周前 作者 vueper 来自 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 中实现无限层级的可点击树形图功能,通过递归组件和事件机制,你可以轻松扩展和修改这个基础实现。

回到顶部