当前位置:首页 > VUE

vue实现递归树

2026-02-20 00:16:29VUE

Vue 实现递归树组件

在 Vue 中实现递归树结构通常用于展示层级数据(如文件目录、组织架构等)。以下是实现递归树的几种方法:

使用组件递归调用

通过组件调用自身实现递归树。需要设置终止条件防止无限递归。

<template>
  <ul>
    <li v-for="node in treeData" :key="node.id">
      {{ node.name }}
      <tree-node v-if="node.children" :treeData="node.children"/>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TreeNode',
  props: {
    treeData: {
      type: Array,
      required: true
    }
  }
}
</script>

动态组件实现

通过 Vue 的 component 动态组件实现递归,避免组件命名冲突。

<template>
  <ul>
    <li v-for="node in treeData" :key="node.id">
      {{ node.name }}
      <component 
        v-if="node.children" 
        :is="treeComponent" 
        :treeData="node.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TreeComponent',
  props: {
    treeData: Array
  },
  data() {
    return {
      treeComponent: 'TreeComponent'
    }
  }
}
</script>

使用渲染函数

通过 render 函数实现更灵活的递归树结构。

export default {
  name: 'TreeRender',
  props: {
    treeData: Array
  },
  render(h) {
    const renderNode = (node) => {
      return h('li', [
        node.name,
        node.children && h('ul', node.children.map(child => renderNode(child)))
      ])
    }
    return h('ul', this.treeData.map(node => renderNode(node)))
  }
}

带交互功能的递归树

实现可展开/折叠的递归树组件。

vue实现递归树

<template>
  <ul>
    <li v-for="node in treeData" :key="node.id">
      <span @click="toggleExpand(node)">
        {{ node.expanded ? '▼' : '►' }} {{ node.name }}
      </span>
      <tree-node 
        v-if="node.children && node.expanded" 
        :treeData="node.children"
      />
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TreeNode',
  props: {
    treeData: Array
  },
  methods: {
    toggleExpand(node) {
      this.$set(node, 'expanded', !node.expanded)
    }
  }
}
</script>

注意事项

  • 递归组件必须设置 name 选项,否则无法自调用
  • 确保数据有终止条件,避免无限递归
  • 对于大数据量考虑使用虚拟滚动优化性能
  • 可以通过作用域插槽提供自定义节点内容

以上方法均可根据实际需求进行调整,如添加节点选择、拖拽排序等功能。

标签: 递归vue
分享给朋友:

相关文章

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:用…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(如…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现input

vue实现input

Vue 实现 Input 输入框的方法 基本双向绑定 使用 v-model 指令实现双向数据绑定,适用于大多数表单场景: <template> <input v-model="…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…