当前位置:首页 > VUE

vue树状表格简单实现

2026-02-24 09:53:49VUE

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实现表格多行修改

实现表格多行修改的方法 数据绑定与表格渲染 使用v-model绑定表格数据到Vue实例的data属性。通过v-for循环渲染表格行,并为每行数据添加编辑状态标识。 <template>…

国外vue实现表格控件

国外vue实现表格控件

以下是国外流行的 Vue 表格控件实现方案及特点,供参考: vue-good-table 基于 Vue 2/3 的轻量级表格组件,支持排序、分页、筛选等功能。 安装方式: npm inst…

在vue实现学生表格

在vue实现学生表格

实现学生表格的基本结构 在Vue中实现学生表格需要使用<table>标签结合Vue的数据绑定功能。准备一个数组存储学生数据,通过v-for指令动态渲染表格行。 <template…

vue element实现表格

vue element实现表格

Vue + Element UI 实现表格 Element UI 提供了强大的表格组件 el-table,结合 Vue 可以快速实现数据展示、排序、筛选等功能。 基础表格实现 安装 Element…

css表格制作

css表格制作

CSS表格制作方法 使用CSS创建表格可以通过多种方式实现,以下是常见的几种方法: 使用HTML原生表格标签结合CSS样式 <table class="styled-table">…

vue实现简单表格

vue实现简单表格

使用 Vue 实现简单表格 Vue 提供了多种方式实现表格功能,以下是基于 Vue 3 的两种常见方法: 基础表格实现 通过 v-for 指令循环渲染表格数据: <template>…