当前位置:首页 > VUE

vue实现多个树状图

2026-01-07 01:52:28VUE

Vue 实现多个树状图的方法

使用第三方组件库(如 Element UI)

Element UI 提供了 el-tree 组件,可以快速实现树状图。通过配置 dataprops 属性,可以展示多个树状结构。

<template>
  <div>
    <el-tree :data="treeData1" :props="defaultProps"></el-tree>
    <el-tree :data="treeData2" :props="defaultProps"></el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      treeData1: [
        {
          label: '一级节点1',
          children: [
            { label: '二级节点1' },
            { label: '二级节点2' }
          ]
        }
      ],
      treeData2: [
        {
          label: '一级节点A',
          children: [
            { label: '二级节点A' },
            { label: '二级节点B' }
          ]
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    };
  }
};
</script>

自定义递归组件

如果需要更灵活的树状图,可以自定义递归组件。通过递归调用子组件实现多层嵌套。

<template>
  <div>
    <tree-node :node="treeData1"></tree-node>
    <tree-node :node="treeData2"></tree-node>
  </div>
</template>

<script>
import TreeNode from './TreeNode.vue';

export default {
  components: { TreeNode },
  data() {
    return {
      treeData1: {
        name: '根节点1',
        children: [
          { name: '子节点1' },
          { name: '子节点2' }
        ]
      },
      treeData2: {
        name: '根节点A',
        children: [
          { name: '子节点A' },
          { name: '子节点B' }
        ]
      }
    };
  }
};
</script>

TreeNode.vue 中:

<template>
  <div>
    <div>{{ node.name }}</div>
    <tree-node
      v-for="child in node.children"
      :key="child.name"
      :node="child"
    ></tree-node>
  </div>
</template>

<script>
export default {
  name: 'TreeNode',
  props: ['node']
};
</script>

动态加载数据

对于数据量较大的树状图,可以使用动态加载方式。通过监听节点展开事件加载子节点数据。

<template>
  <el-tree
    :data="treeData"
    :props="defaultProps"
    :load="loadNode"
    lazy
  ></el-tree>
</template>

<script>
export default {
  data() {
    return {
      treeData: [],
      defaultProps: {
        children: 'children',
        label: 'label',
        isLeaf: 'leaf'
      }
    };
  },
  methods: {
    loadNode(node, resolve) {
      if (node.level === 0) {
        resolve([{ label: '根节点' }]);
      } else {
        setTimeout(() => {
          resolve([
            { label: '子节点1', leaf: true },
            { label: '子节点2', leaf: true }
          ]);
        }, 500);
      }
    }
  }
};
</script>

多树联动

如果需要多个树状图之间联动,可以通过共享状态或事件总线实现交互。

vue实现多个树状图

<template>
  <div>
    <el-tree
      :data="treeData1"
      :props="defaultProps"
      @node-click="handleNodeClick"
    ></el-tree>
    <el-tree
      :data="treeData2"
      :props="defaultProps"
      :highlight-current="true"
      ref="tree2"
    ></el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      treeData1: [/* 数据1 */],
      treeData2: [/* 数据2 */],
      defaultProps: { children: 'children', label: 'label' }
    };
  },
  methods: {
    handleNodeClick(data) {
      this.$refs.tree2.setCurrentKey(data.label);
    }
  }
};
</script>

注意事项

  • 确保树状图的数据结构一致,避免渲染错误。
  • 动态加载时注意性能优化,避免频繁请求数据。
  • 自定义组件时,递归深度不宜过深,可能导致栈溢出。

标签: 多个树状
分享给朋友:

相关文章

vue实现多个元素

vue实现多个元素

Vue 实现多个元素的方法 在 Vue 中实现多个元素的渲染或操作有多种方式,具体取决于需求场景。以下是常见的几种方法: 使用 v-for 渲染列表 通过 v-for 指令可以动态渲染多个元素,适用…

vue树状图中实现

vue树状图中实现

Vue 树状图实现方法 在 Vue 中实现树状图可以通过多种方式完成,以下是几种常见的方法: 使用递归组件 递归组件是 Vue 中实现树状结构的经典方式。通过组件自身调用自身,可以轻松渲染多层嵌套…

vue 实现树状递归

vue 实现树状递归

实现树状递归的核心思路 在Vue中实现树状递归结构,通常需要结合组件递归调用和动态数据渲染。核心在于组件自身调用自身,并通过props传递层级数据。 基础递归组件实现 创建一个自调用的组件模板,通过…

vue实现多个预览图

vue实现多个预览图

Vue 实现多个预览图的方法 使用 v-for 循环渲染图片列表 通过 v-for 指令遍历图片数组,动态生成多个预览图。适用于需要展示固定或动态图片列表的场景。 <template>…

vue实现多个选框select

vue实现多个选框select

Vue 实现多个选框 Select 在 Vue 中实现多个选框(多选 Select)可以通过原生 <select> 元素结合 multiple 属性,或使用第三方 UI 库(如 Eleme…

vue实现树状层级效果

vue实现树状层级效果

实现树状层级效果的常用方法 在Vue中实现树状层级效果,可以通过递归组件或第三方库来实现。以下是几种常见的方法: 递归组件实现 递归组件是Vue中实现树状结构的核心方法。通过组件自身调用自身,可以轻…