6.4 Element UI 中的 <el-table> 表格组件

一、 核心组成与基本结构

Element UI 的表格主要由以下几个核心部分构成:

  1. <el-table>: 表格的根容器,负责管理数据、选择、排序、分页集成等全局状态。
  2. <el-table-column>: 定义表格的一列。表格的列结构由一个或多个 <el-table-column> 组件定义。
  3. data: 传递给 <el-table> 的 data 属性,是一个数组,数组中的每个对象代表表格中的一行数据。
  4. prop<el-table-column> 的 prop 属性,指定该列显示 data 数组中每个对象的哪个属性的值。
  5. label<el-table-column> 的 label 属性,定义该列的标题

最基础的示例:

<template><el-table :data="tableData" style="width: 100%"><el-table-column prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column></el-table>
</template><script>
export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄'}]}}
}
</script>

二、 <el-table> 详解 (根容器)

管理表格的整体行为和外观。

  • 关键属性:
    • data必填。绑定表格的数据源数组。
    • height / max-height: 设置表格的高度。设置 height 时,表格会固定高度,超出部分出现纵向滚动条。设置 max-height 时,表格高度随内容变化,但不超过最大值。
    • stripe: 是否显示斑马纹(隔行变色)。
    • border: 是否显示纵向边框。
    • fit: 列的宽度是否自撑开。true 时,列宽会根据内容自动调整(可能不精确)。
    • show-header: 是否显示表头。
    • highlight-current-row: 是否要高亮当前鼠标悬停的行。
    • current-row-key: 高亮某一行的 key,需要设置 row-key
    • row-key: 为数据行指定 key在使用 reserve-selectionexpandtree 等功能时非常重要,推荐始终设置。通常指向数据中唯一的字段(如 id)。
    • empty-text: 数据为空时显示的文本。
    • default-expand-all: 默认是否展开所有行(用于树形数据或展开行)。
    • tooltip-effecthover 时 el-tooltip 的效果。dark / light
    • row-style: 行的 CSS 样式,可以是对象或返回对象的函数。
    • cell-style: 单元格的 CSS 样式,可以是对象或返回对象的函数。
    • header-row-style / header-cell-style: 表头行/单元格的样式。
    • row-class-name / cell-class-name: 为行/单元格添加自定义 class,可以是字符串或返回字符串的函数。
  • 关键事件:
    • @select: 当用户手动勾选数据行的 Checkbox 时触发。
    • @select-all: 当用户手动勾选全选 Checkbox 时触发。
    • @selection-change: 当选择项发生变化时触发。
    • @cell-mouse-enter / @cell-mouse-leave: 单元格 hover 事件。
    • @cell-click / @cell-dblclick: 单元格点击/双击事件。
    • @row-click / @row-dblclick: 行点击/双击事件。
    • @row-contextmenu: 行右键菜单事件。
    • @header-click / @header-contextmenu: 表头点击/右键菜单事件。
    • @sort-change: 当表格的排序条件发生变化时触发。
    • @filter-change: 当表格的筛选条件发生变化时触发。
    • @current-change: 当高亮行发生变化时触发。
    • @expand-change: 当行展开状态发生变化时触发。

三、 <el-table-column> 详解 (列定义)

定义表格的每一列,是表格功能的核心。

  • 关键属性:
    • type: 定义列的类型。这是最重要的属性之一。
      • selection: 渲染一个 Checkbox,用于多选。通常放在第一列。
      • index: 渲染一个索引列,显示行的序号(从 1 开始)。
      • expand: 渲染一个可展开的按钮(+/-),用于展开行显示额外内容。
    • prop: 指定该列显示数据对象中的哪个属性的值。例如 prop="name" 会显示 row.name
    • label: 该列的标题
    • width: 设置该列的宽度(像素值,如 180)。
    • min-width: 设置该列的最小宽度。当 fit=true 时,列宽会自适应,但不会小于 min-width
    • fixed: 列是否固定。true / left / right。固定列在表格横向滚动时会固定在左侧或右侧。
    • sortable: 该列是否可排序。true / customcustom 时需要监听 @sort-change 事件自行处理排序逻辑(常用于服务端排序)。
    • sort-method: 自定义排序方法的函数。
    • sort-by: 数组或字符串,指定排序时依据的属性或计算函数。
    • resizable: 对应列是否可以通过拖动改变宽度。true / false
    • column-key: 给列设置一个 key,用于 @filter-change 事件的回调参数。
    • align: 列内容的对齐方式。left / center / right
    • header-align: 表头的对齐方式。left / center / right。若不设置,则继承 align 的值。
    • show-overflow-tooltip: 当内容过长被隐藏时是否显示 tooltip。
    • formatter: 用来格式化显示文本的函数。function(row, column, cellValue, index)
    • filters: 数据过滤的选项。数组格式,如 [{ text: '2016-05-01', value: '2016-05-01' }]
    • filter-placement: 过滤弹出框的定位。top-start / top-end / bottom-start 等。
    • filter-multiple: 数据过滤的选项是否多选。
    • filter-method: 数据过滤使用的方法。function(value, row, column),返回 true 表示显示,false 表示隐藏。
    • filtered-value: 设置的筛选条件,需要配合 filter-method 使用。
  • 插槽 (Slots):
    • 默认插槽: 用于自定义列的内容。这是实现复杂列(如操作按钮、状态标签、自定义组件)的最主要方式。插槽作用域 (slot-scope) 提供了 row (当前行数据), column (当前列对象), $index (行索引)。
    • header: 用于自定义表头的内容。

四、 常用功能详解

1. 多选 (Selection)
<el-table:data="tableData"@selection-change="handleSelectionChange"ref="multipleTable"
><!-- selection 列 --><el-table-column type="selection" width="55"></el-table-column><el-table-column prop="name" label="姓名"></el-table-column><!-- ... -->
</el-table><script>
export default {methods: {handleSelectionChange(val) {this.multipleSelection = val; // val 是选中行的数据对象数组},toggleSelection(rows) {// 手动切换某行的选中状态if (rows) {rows.forEach(row => {this.$refs.multipleTable.toggleRowSelection(row);});} else {this.$refs.multipleTable.clearSelection();}}}
}
</script>
2. 排序 (Sorting)
<!-- 简单前端排序 -->
<el-table-column prop="date" label="日期" sortable width="180"></el-table-column><!-- 自定义排序 (服务端排序) -->
<el-table-columnprop="name"label="姓名"sortable="custom"@sort-change="handleSortChange"
></el-table-column><script>
export default {methods: {handleSortChange({ column, prop, order }) {// 根据 prop 和 order ('ascending', 'descending', null) 请求服务端数据console.log(`排序字段: ${prop}, 顺序: ${order}`);// fetchSortedData(prop, order);}}
}
</script>
3. 筛选 (Filtering)
<el-table-columnprop="tag"label="标签":filters="[{ text: '家', value: '家' }, { text: '公司', value: '公司' }]":filter-method="filterTag"filter-placement="bottom-end"
><template slot-scope="scope"><!-- 使用 el-tag 展示标签 --><el-tag :type="scope.row.tag === '家' ? 'primary' : 'success'" closeable>{{ scope.row.tag }}</el-tag></template>
</el-table-column><script>
export default {methods: {filterTag(value, row) {return row.tag === value;}}
}
</script>
4. 自定义列内容 (使用插槽)

这是最强大的功能,可以实现几乎任何复杂的单元格内容。

<el-table-column label="操作" width="180" fixed="right"><template slot-scope="scope"><el-button @click="handleEdit(scope.$index, scope.row)" size="mini">编辑</el-button><el-button @click="handleDelete(scope.$index, scope.row)" size="mini" type="danger">删除</el-button><!-- 条件渲染 --><el-button v-if="scope.row.status === 0" size="mini" @click="handleEnable(scope.row)">启用</el-button><el-button v-else size="mini" @click="handleDisable(scope.row)">禁用</el-button><!-- 使用 switch --><el-switchv-model="scope.row.enabled"active-color="#13ce66"inactive-color="#ff4949"@change="handleSwitchChange(scope.row)"></el-switch></template>
</el-table-column>
5. 展开行 (Expand)
<el-table:data="tableData"style="width: 100%":row-key="getRowKey" <!-- 重要:用于展开行 -->
><!-- expand 列 --><el-table-column type="expand" width="50"><template slot-scope="props"><p>详细信息: {{ props.row.detail }}</p><p>描述: {{ props.row.description }}</p><!-- 可以嵌套另一个表格 --><!-- <el-table :data="props.row.subData">...</el-table> --></template></el-table-column><el-table-column label="姓名" prop="name"></el-table-column><!-- ... -->
</el-table><script>
export default {methods: {getRowKey(row) {return row.id; // 返回唯一标识}}
}
</script>
6. 树形数据与懒加载
<el-table:data="tableData"style="width: 100%;margin-bottom: 20px;"row-key="id"borderdefault-expand-all:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
><el-table-column prop="name" label="名称" sortable></el-table-column><el-table-column prop="date" label="日期" sortable></el-table-column><el-table-column prop="address" label="地址"></el-table-column>
</el-table><!-- 懒加载 -->
<el-table:data="tableData"style="width: 100%"row-key="id"border:tree-props="{children: 'children', hasChildren: 'hasChildren'}":load="load"
><!-- ... -->
</el-table><script>
export default {methods: {load(tree, treeNode, resolve) {// 模拟异步加载setTimeout(() => {resolve([{ id: 31, name: '叶子', date: '2016-05-01', address: '上海市' },{ id: 32, name: '叶子2', date: '2016-05-01', address: '上海市' }]);}, 1000);}}
}
</script>
7. 跨行/跨列合并 (Span Method)
<el-table:data="tableData":span-method="arraySpanMethod"borderstyle="width: 100%"
><!-- ... -->
</el-table><script>
export default {methods: {arraySpanMethod({ row, column, rowIndex, columnIndex }) {// 合并第一列(姓名)中相同值的行if (columnIndex === 0) {if (rowIndex % 2 === 0) {return {rowspan: 2, // 跨两行colspan: 1  // 跨一列};} else {return {rowspan: 0, // 不显示colspan: 0};}}}}
}
</script>

五、 高级技巧与最佳实践

  1. 性能优化:
    • row-key必须设置,尤其在数据量大或使用 reserve-selectionexpand 时,能极大提升性能。
    • height / max-height: 设置固定高度,避免表格过长导致页面卡顿。
    • 虚拟滚动: Element UI 原生不支持,但社区有第三方库(如 vue-virtual-scroll-list)可以集成实现超大数据量的流畅滚动。
  2. 分页集成: 通常 <el-table> 与 <el-pagination> 组件配合使用。<el-table> 显示当前页数据,<el-pagination> 控制页码,通过监听分页变化请求新数据。
  3. 自定义样式: 使用 row-stylecell-stylerow-class-namecell-class-name 或 CSS 覆盖(注意类名)来自定义表格样式。
  4. 空状态: 使用 empty-text 或 slot="empty" 插槽自定义空数据时的展示内容(如图片、提示语)。
  5. 可访问性: 确保表头清晰,使用 aria-* 属性(如果框架支持)。
  6. 响应式: 表格在小屏幕上可能需要横向滚动。考虑使用 min-width 和 max-width 控制列宽,或在移动端使用其他布局(如卡片列表)。

总结

Element UI 的 <el-table> 组件功能极其丰富,从基础的数据展示到复杂的多选、排序、筛选、展开、树形结构、合并单元格等,几乎涵盖了后台管理系统的所有表格需求。掌握 <el-table-column>type, prop, label, slot 以及 <el-table>data, row-key 是使用它的基础。灵活运用插槽 (slot-scope) 是实现复杂交互和自定义内容的关键。结合分页组件,可以构建出功能强大、用户体验良好的数据表格界面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94272.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 软件编程(十一)网络编程:TCP 机制与 HTTP 协议

五、TCP 进阶机制&#xff08;一&#xff09;TCP 头部标志位TCP 头部的标志位是控制通信行为的 “开关”&#xff0c;常用标志位功能&#xff1a;标志位含义典型场景SYN请求建立连接三次握手第一步&#xff0c;发起连接请求ACK响应报文确认回复对方&#xff0c;确认已收到数据P…

[element-plus] el-table在行单击时获取行的index

el-table中添加 row-class-name&#xff0c;绑定row-click事件 <el-table:data"list":row-class-name"tableRowClassName"row-click"handleRowClick" > </el-table>给el-table中的每个row对象里添加index属性 tableRowClassName({…

真实应急响应案例记录

成功溯源的应急背景事件背景&#xff1a;服务器被植入博彩黑链入侵排查查看日志&#xff1a;发现Struts2漏洞利用痕迹通过process monitor工具监控Web进程(java.exe),发现执行了以下命令:攻击入侵者服务器查看Web日志,可发现攻击者的的Ip地址61.139.77.xx (四川省成都市 61.139…

RAG学习(五)——查询构建、Text2SQL、查询重构与分发

检索优化&#xff08;二&#xff09; 一、查询构建 在前面的章节中&#xff0c;我们探讨了如何通过向量嵌入和相似度搜索来从非结构化数据中检索信息。然而&#xff0c;在实际应用中&#xff0c;我们常常需要处理更加复杂和多样化的数据&#xff0c;包括结构化数据&#xff0…

【typenum】 28 数组长度和二进制数的位数(Len)

一、源码 这段代码实现了一个类型级别的长度计算系统&#xff0c;用于在编译时计算数组长度和二进制数的位数。 定义&#xff08;type_operators.rs&#xff09; /// A **type operator** that gives the length of an Array or the number of bits in a UInt. #[allow(clippy:…

【Docker项目实战】使用Docker部署Hibiscus.txt简单日记工具

【Docker项目实战】使用Docker部署Hibiscus.txt简单日记工具一、Hibiscus介绍1.1 Hibiscus简介1.2 主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、拉取镜像五、部署Hibis…

openharmony之启动恢复子系统详解

OpenHarmony的启动恢复子系统负责整个系统的启动流程&#xff0c;其中init进程是整个系统启动的第一个用户态进程&#xff08;PID1&#xff09;&#xff0c;承担着系统初始化的核心职责 &#x1f3af; 目录结构 &#x1f4cb; 理论基础&#x1f50d; 源码结构分析⚙️ 配置体系…

Jenkins + SonarQube 从原理到实战四:Jenkins 与 Gerrit 集成并实现自动任务

前言 前面我们已经部署了 SonarQube&#xff0c;并加入了 sonar-cxx 插件&#xff0c;实现了 C/C 代码扫描&#xff0c;同时打通了 Windows AD 域&#xff0c;实现了 AD 用户登录与权限管控。 原计划本篇&#xff08;第四篇&#xff09;完成 Jenkins Gerrit Sonar 的 CI 部分…

基于Spring Boot与Redis的电商场景面试问答解析

基于Spring Boot与Redis的电商场景面试问答解析 第一轮&#xff1a;基础问题 面试官&#xff1a; 你好小C&#xff0c;今天我们以电商场景为背景进行技术面试。第一个问题&#xff0c;解释一下Spring Boot的核心优势是什么&#xff1f; 小C&#xff1a; Spring Boot就是开箱即用…

CUDA安装,pytorch库安装

一、CUDA安装 1.查看自己电脑适配的CUDA的最高版本 在命令提示符里输入nvidia-smi表格右上角显示的CUDA版本是该电脑适配的最高版本一般下载比该版本低一点的版本&#xff0c;因为会更稳定 由于本机没有GPU所以会出现这个报错&#xff0c;如果有GPU会出现如下报告&#xff1a…

力扣 第 463 场周赛

1. 按策略买卖股票的最佳时机 给你两个整数数组 prices 和 strategy&#xff0c;其中&#xff1a; prices[i] 表示第 i 天某股票的价格。 strategy[i] 表示第 i 天的交易策略&#xff0c;其中&#xff1a; -1 表示买入一单位股票。 0 表示持有股票。 1 表示卖出一单位股票。 同…

Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列&#xff08;六&#xff09;&#xff1a;plt.imshow() - 绘制矩阵与图像的强大工具一、 plt.imshow() 是什么&#xff1f;何时使用&#xff1f;二、 函数原型与核心参数三、 从入门到精通&#xff1a;代码示例示…

小游戏AssetBundle加密方案解析

据游戏工委数据统计&#xff0c;2025年1-6月&#xff0c;国内小程序游戏市场实际销售收入232.76亿元&#xff0c;同比增长40.2%。其中内购产生收入153.03亿元&#xff0c;占比65.7%&#xff0c;呈逐年提升趋势。爆款频出的小游戏&#xff0c;已经成为当下游戏行业的重要增长点。…

linux编程----网络通信(TCP)

1.TCP特点1.面向数据流&#xff1b;2.有连接通信&#xff1b;3.安全可靠的通信方式&#xff1b;4.机制复杂&#xff0c;网络资源开销大&#xff1b;5.本质只能实现一对一的通信&#xff08;可使用TCP的并发方式实现一对多通信&#xff09;&#xff1b;2.TCP的三次握手与四次挥手…

HTTP请求的执行流程

HTTP请求的执行流程是一个系统化的过程&#xff0c;涉及多个网络协议和交互步骤。以下是完整的流程分解&#xff0c;结合关键技术和逻辑顺序&#xff1a;&#x1f310; 一、连接准备阶段​​URL解析与初始化​​客户端&#xff08;浏览器/应用&#xff09;解析目标URL&#xff…

联想win11笔记本音频失效,显示差号(x)

该博客可以解答 常见问题详情 Win10系统安装更新后右下角声音出现红叉&#xff0c;电脑也没有声音&#xff0c; 通过设备管理器查看“系统设备”发现“音频部分“出现黄色感叹号&#xff0c; 更新驱动、卸载驱动与第三方工具检测安装后重启都不行。 故障原因 应该是用户曾经…

elasticsearch 7.x elasticsearch 使用scroll滚动查询中超时问题案例

一 问题 1.1 问题描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并发内存池(1)-定长内存池

高并发内存池&#xff08;1&#xff09;-定长内存池 可以采用两种方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>获取到T对象大小的内存池&#xff0c;更推荐使用方式二&#xff0c;因为可以动态灵活调整类型 需要的…

第三阶段sql server数据-4:数据库脚本生成,备份与还原,分离与附加操作的图文步骤

1_生成数据库脚本&#xff08;1&#xff09;在数据库上右键选择任务&#xff08;2&#xff09;选择生成脚本&#xff08;3&#xff09;选择下一步&#xff0c;如果下次不想显示此页面&#xff0c;可勾选不再显示此页&#xff08;4&#xff09;如果导出全部数据&#xff0c;选择…

【C++闯关笔记】STL:string的学习和使用(万字精讲)

​系列文章目录 第零篇&#xff1a;从C到C入门&#xff1a;C有而C语言没有的基础知识总结-CSDN博客 第一篇&#xff1a;【C闯关笔记】封装①&#xff1a;类与对象-CSDN博客 第二篇&#xff1a;【C闯关笔记】封装②&#xff1a;友元与模板-CSDN博客 第三篇&#xff1a;【C闯…