当前位置:首页 > VUE

vue实现递归树

2026-02-20 00:16:29VUE

Vue 实现递归树组件

在 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 动态组件实现递归,避免组件命名冲突。

vue实现递归树

<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)))
  }
}

带交互功能的递归树

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

<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 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

eventbus vue实现

eventbus vue实现

EventBus 实现原理 EventBus 是一种发布/订阅模式,用于 Vue 组件间的通信。核心是通过一个中央事件总线管理事件监听和触发。 创建 EventBus 在 Vue 项目中创建一个独立…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…