当前位置:首页 > VUE

vue实现结构树

2026-02-18 04:57:59VUE

Vue 实现结构树的方法

使用递归组件实现树形结构

递归组件是 Vue 中实现树形结构的常见方式。通过组件自身调用自身,可以动态渲染无限层级的树形数据。

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

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

使用第三方库 vue-treeselect

vue-treeselect 是一个功能丰富的树形选择组件,支持多选、搜索、异步加载等功能。

安装:

npm install @riophae/vue-treeselect

使用示例:

<template>
  <treeselect
    v-model="value"
    :multiple="true"
    :options="options"
  />
</template>

<script>
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'

export default {
  components: { Treeselect },
  data() {
    return {
      value: null,
      options: [{
        id: 'a',
        label: 'a',
        children: [{
          id: 'aa',
          label: 'aa'
        }]
      }]
    }
  }
}
</script>

使用 Element UI 的树形控件

Element UI 提供了 el-tree 组件,适合在 Element UI 项目中使用。

安装:

npm install element-ui

使用示例:

<template>
  <el-tree
    :data="data"
    :props="defaultProps"
    @node-click="handleNodeClick"
  ></el-tree>
</template>

<script>
export default {
  data() {
    return {
      data: [{
        label: '一级 1',
        children: [{
          label: '二级 1-1'
        }]
      }],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    }
  },
  methods: {
    handleNodeClick(data) {
      console.log(data)
    }
  }
}
</script>

自定义树形组件实现

对于需要高度定制的场景,可以完全自定义树形组件。

<template>
  <div class="tree">
    <div
      v-for="node in nodes"
      :key="node.id"
      class="tree-node"
      :style="{ paddingLeft: `${level * 20}px` }"
    >
      <div @click="toggleExpand(node)">
        {{ node.expanded ? '▼' : '▶' }} {{ node.name }}
      </div>
      <tree-node
        v-if="node.expanded && node.children"
        :nodes="node.children"
        :level="level + 1"
      />
    </div>
  </div>
</template>

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

使用 Vue Draggable 实现可拖拽树

结合 vue-draggable 可以实现可拖拽排序的树形结构。

安装:

npm install vuedraggable

使用示例:

vue实现结构树

<template>
  <draggable
    v-model="treeData"
    group="nodes"
    @end="onDragEnd"
  >
    <div v-for="element in treeData" :key="element.id">
      {{ element.name }}
      <tree-node
        v-if="element.children"
        :treeData="element.children"
      />
    </div>
  </draggable>
</template>

<script>
import draggable from 'vuedraggable'

export default {
  components: { draggable },
  props: {
    treeData: Array
  },
  methods: {
    onDragEnd() {
      // 处理拖拽结束逻辑
    }
  }
}
</script>

标签: 结构vue
分享给朋友:

相关文章

vue实现列表显示

vue实现列表显示

Vue 实现列表显示的方法 在 Vue 中实现列表显示通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式。 基本列表渲染 通过 v-for 指令遍历数组,动态生成列…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身: &…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <template&…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现 hover

vue实现 hover

实现 Vue 中的 hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是常见的几种方法: 使用 CSS 伪类 最简单的方式是直接使用 CSS 的 :hover 伪类,无…

vue 实现弹窗

vue 实现弹窗

Vue 实现弹窗的方法 在 Vue 中实现弹窗功能可以通过多种方式完成,以下是几种常见的方法: 使用组件和 v-if/v-show 控制显示 创建一个独立的弹窗组件,通过 v-if 或 v-show…