当前位置:首页 > 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 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

实现 vue ssr

实现 vue ssr

Vue SSR 实现方法 Vue SSR(Server-Side Rendering)通过服务器端渲染 Vue 应用,提升首屏加载速度和 SEO 友好性。以下是核心实现方法: 基础配置 安装必要依赖…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

vue实现双向

vue实现双向

Vue 实现双向绑定的方法 Vue 的双向绑定主要通过 v-model 指令实现,它结合了数据绑定和事件监听,适用于表单元素(如 input、select、textarea 等)。以下是几种常见的实现…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue实现微云

vue实现微云

Vue 实现微云功能 使用 Vue 实现类似微云的网盘功能需要结合前端框架、后端存储及文件处理技术。以下是关键实现步骤和代码示例: 前端框架搭建 使用 Vue CLI 创建项目基础结构,安装必要依赖…