当前位置:首页 > 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>

多树联动

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

<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 实现多个页面的方法 在 Vue 中实现多个页面通常需要结合 Vue Router 进行路由管理。以下是实现多页面的核心步骤: 安装 Vue Router 通过 npm 或 yarn 安装…

vue实现树状图

vue实现树状图

实现树状图的基本思路 在Vue中实现树状图通常需要递归组件或第三方库的支持。树状图的核心是数据结构的递归渲染,每个节点可能包含子节点,形成层级关系。 使用递归组件实现 递归组件是指组件在其模板中调…

vue多个权限按钮实现

vue多个权限按钮实现

权限按钮的实现方式 在Vue中实现多个权限按钮的控制,可以通过以下几种方式: 基于v-if或v-show的权限控制 通过判断用户权限决定按钮的显示或隐藏。例如: <template&…

vue实现多个选择投票

vue实现多个选择投票

实现多个选择投票的Vue方案 使用Vue实现多选投票功能可以通过以下方式完成,结合表单绑定、事件处理和状态管理。 数据模型设计 定义投票选项数组和用户选择数组: data() { retu…

vue实现横向树状图

vue实现横向树状图

横向树状图实现方案 横向树状图在Vue中可以通过递归组件和CSS布局实现。以下是具体实现方法: 使用递归组件构建树结构 创建递归组件TreeNode.vue,处理节点的渲染和子节点的展开/折叠逻辑:…

vue实现每组多个图片

vue实现每组多个图片

Vue 实现每组多个图片的展示 在 Vue 中展示每组多个图片可以通过多种方式实现,常见的方法包括使用 v-for 循环渲染图片组、结合 CSS 布局或第三方组件库。 使用 v-for 循环渲染图…