当前位置:首页 > VUE

vue树状表格简单实现

2026-02-24 09:53:49VUE

vue树状表格简单实现

vue树状表格简单实现

实现树状表格的基本思路

在Vue中实现树状表格通常需要以下核心功能:递归渲染子节点、展开/折叠控制、数据层级处理。以下是一个基于Element UI的简单实现方案。

安装Element UI(如未安装)

npm install element-ui

基础组件结构

<template>
  <el-table :data="flattenData" row-key="id" border>
    <el-table-column prop="name" label="名称">
      <template #default="{ row }">
        <span :style="{ paddingLeft: (row.level * 18) + 'px' }">
          <span v-if="row.children && row.children.length" @click="toggleExpand(row)">
            {{ row.expanded ? '▼' : '►' }}
          </span>
          {{ row.name }}
        </span>
      </template>
    </el-table-column>
    <el-table-column prop="value" label="值" />
  </el-table>
</template>

数据处理方法

export default {
  data() {
    return {
      treeData: [
        {
          id: 1,
          name: '父节点1',
          value: '值1',
          children: [
            { id: 2, name: '子节点1-1', value: '值1-1' },
            { id: 3, name: '子节点1-2', value: '值1-2' }
          ]
        },
        {
          id: 4,
          name: '父节点2',
          value: '值2',
          children: [
            { 
              id: 5, 
              name: '子节点2-1', 
              value: '值2-1',
              children: [
                { id: 6, name: '孙节点2-1-1', value: '值2-1-1' }
              ]
            }
          ]
        }
      ],
      flattenData: []
    }
  },
  methods: {
    flattenTree(data, level = 0, parentExpanded = true) {
      let result = [];
      data.forEach(item => {
        const newNode = {
          ...item,
          level,
          expanded: false,
          visible: parentExpanded
        };
        result.push(newNode);
        if (item.children && item.children.length) {
          result = result.concat(
            this.flattenTree(item.children, level + 1, newNode.expanded && newNode.visible)
          );
        }
      });
      return result;
    },
    toggleExpand(row) {
      row.expanded = !row.expanded;
      this.updateFlattenData();
    },
    updateFlattenData() {
      this.flattenData = this.flattenTree(this.treeData);
    }
  },
  created() {
    this.updateFlattenData();
  }
}

样式优化

.el-table .cell {
  white-space: nowrap;
}
span[style*="padding-left"] {
  cursor: pointer;
  user-select: none;
}

实现说明

  1. 数据结构:使用包含children属性的嵌套结构表示树形数据
  2. 扁平化处理:将树形数据转换为扁平数组以便表格渲染,同时添加levelexpanded状态
  3. 展开控制:通过点击图标切换expanded状态,动态更新可见数据
  4. 缩进显示:根据level属性设置左padding实现视觉层级

进阶优化方向

  • 添加懒加载功能
  • 实现复选框全选/半选状态
  • 增加拖拽排序支持
  • 添加搜索过滤功能

通过以上方法即可实现基本的树状表格功能,可根据实际需求调整数据结构和交互细节。

标签: 树状表格
分享给朋友:

相关文章

vue实现简单表格

vue实现简单表格

Vue 实现简单表格的方法 使用原生 HTML 表格 在 Vue 模板中可以直接使用 HTML 原生表格标签,通过 v-for 动态渲染数据: <template> <tabl…

使用vue实现表格

使用vue实现表格

使用 Vue 实现表格 在 Vue 中实现表格可以通过多种方式完成,以下是一个基于 Vue 3 的示例,展示如何动态渲染表格数据并支持基础功能(如排序、筛选)。 基础表格实现 通过 v-for 循环…

制作css表格

制作css表格

基础CSS表格结构 使用HTML的<table>标签创建表格骨架,搭配CSS控制样式。以下是一个基础示例: <table class="styled-table"> &l…

vue动态表格实现

vue动态表格实现

Vue动态表格实现方法 使用v-for指令渲染动态数据 通过v-for指令可以循环遍历数组数据生成表格行,数据变化时表格自动更新。示例代码: <template> <table…

vue 实现页面 表格

vue 实现页面 表格

Vue 实现页面表格的方法 Vue 提供了多种方式实现表格功能,可以根据需求选择不同的方案。以下是常见的实现方法: 使用原生 HTML 表格 通过 Vue 的模板语法直接渲染表格数据: <t…

vue实现复杂表格

vue实现复杂表格

Vue 实现复杂表格的方法 在 Vue 中实现复杂表格通常需要结合组件化、动态渲染和数据处理的能力。以下是几种常见的方法和实现技巧: 使用 Element UI 或 Ant Design Vue 的…