Element Plus <el-table> 组件之展开行Table在项目中使用

目录

官方样式:

展开前:

展开:

原始代码:

代码详解:

项目使用场景:

完成效果:

具体实现范本:

1.调整数据结构

2. 修改标签和数据绑定

3. JavaScript 部分导入和创建对象

4.注意


官方样式:

展开前:

展开:

 原始代码:

<template>switch parent border: <el-switch v-model="parentBorder" /> switch childborder: <el-switch v-model="childBorder" /><el-table :data="tableData" :border="parentBorder" style="width: 100%"><el-table-column type="expand"><template #default="props"><div m="4"><p m="t-0 b-2">State: {{ props.row.state }}</p><p m="t-0 b-2">City: {{ props.row.city }}</p><p m="t-0 b-2">Address: {{ props.row.address }}</p><p m="t-0 b-2">Zip: {{ props.row.zip }}</p><h3>Family</h3><el-table :data="props.row.family" :border="childBorder"><el-table-column label="Name" prop="name" /><el-table-column label="State" prop="state" /><el-table-column label="City" prop="city" /><el-table-column label="Address" prop="address" /><el-table-column label="Zip" prop="zip" /></el-table></div></template></el-table-column><el-table-column label="Date" prop="date" /><el-table-column label="Name" prop="name" /></el-table>
</template><script lang="ts" setup>
import { ref } from 'vue'const parentBorder = ref(false)
const childBorder = ref(false)
const tableData = [{date: '2016-05-03',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-02',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-04',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-01',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-08',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-06',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},{date: '2016-05-07',name: 'Tom',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',family: [{name: 'Jerry',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Spike',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},{name: 'Tyke',state: 'California',city: 'San Francisco',address: '3650 21st St, San Francisco',zip: 'CA 94114',},],},
]
</script>

代码详解:

  • 首先,根据 v-model 指令,在 Vue 的 setup() 中定义了 parentBorderchildBorder 两个响应式变量,分别用于控制父表格和子表格的边框显示与隐藏。
  • 然后,通过传入数据数组 tableData<el-table>:data 属性,将数据渲染为表格。同时,使用 :border 属性绑定了 parentBorderchildBorder 变量,以实现动态控制表格边框的显示与隐藏。
  • 在表格中,使用 <template> 标签和 #default 的语法糖来定义扩展列中的内容。扩展列通过点击图标或者行展开按钮来显示更多详细信息。
  • 在扩展列中,使用了 <el-table> 嵌套来展示家庭成员的信息。同样地,也使用了 :border 属性绑定了 childBorder 变量,以便动态控制子表格边框的显示。
  • 在展示每个家庭成员的信息时,使用了 <p><h3> 标签来显示不同的文本内容,其中 <h3> 标签用于显示 "Family" 这个标题。

项目使用场景:

项目中有一对多的数据想要展示,例如:一个团队对应多个成员,父表格展示团队信息,子表格展示对应成员信息

完成效果:

父表格展示团队信息,子表格展示对应成员信息

具体实现范本:

1.调整数据结构

根据你的数据库中的表结构,创建一个适当的数据结构来存储团队信息和成员信息。可以使用 JavaScript 对象或数组的形式来表示

const teamData = [{teamName: 'Team A',teamMembers: [{ name: 'John', age: 25, position: 'Manager' },{ name: 'Alice', age: 30, position: 'Developer' },{ name: 'Bob', age: 28, position: 'Designer' }]},{teamName: 'Team B',teamMembers: [{ name: 'Mike', age: 32, position: 'Manager' },{ name: 'Sarah', age: 27, position: 'Developer' },{ name: 'Emily', age: 29, position: 'Designer' }]},// ... 可以添加更多的团队信息
];

在这个例子中,teamData 数组包含了多个团队对象,每个团队对象都有团队名称 teamName 和团队成员数组 teamMembers

每个团队成员对象都包含了成员的姓名 name、年龄 age 和职位 position

2. 修改标签和数据绑定

<el-table :data="teamData" :border="parentBorder" style="width: 100%"><el-table-column type="expand"><template #default="props"><div><h3>Team Name: {{ props.row.teamName }}</h3><el-table :data="props.row.teamMembers" :border="childBorder"><el-table-column label="Name" prop="name" /><el-table-column label="Age" prop="age" /><el-table-column label="Position" prop="position" /></el-table></div></template></el-table-column><el-table-column label="Team Name" prop="teamName" />
</el-table>

在这个修改后的代码中,将标签中的 tableData 修改为 teamData。在父表格中,使用 teamData 数组作为数据源,并绑定到 <el-table>:data 属性上。

在扩展列中,使用 props.row 来获取当前团队对象的信息,包括团队名称和团队成员数组。然后通过嵌套的 <el-table> 组件来展示每个团队成员的信息,使用 props.row.teamMembers 作为数据源。

<el-table-column> 标签中的 prop 属性与数据对象的属性名进行绑定,以正确地显示每个成员的姓名、年龄和职位。

3. JavaScript 部分导入和创建对象

import { ref } from 'vue';// ...const parentBorder = ref(false);
const childBorder = ref(false);
const teamData = [// 数据结构和示例中的相同
];
  • 在这个示例代码中,导入了 ref 函数,并在 setup() 中使用它来创建父表格和子表格边框的开关变量 parentBorderchildBorder
  • 你可以根据需要设置默认的开关状态,或者根据用户的操作来改变它们的值。
  • 通过以上步骤,你已经成功地修改了代码,使其能够展示父表格和子表格,并以团队信息和成员信息的形式呈现。请根据你的实际情况调整数据结构和样式,并根据需求修改其他相关部分

4.注意

对于 teamMember 的类型定义,可以使用一个包含成员信息的对象数组。每个成员对象可以包含学号、姓名、专业、年级等属性

interface TeamMember {studentID: string;studentName: string;major: string;grade: string;lab: string;
}interface Team {teamName: string;projectName: string;projectIntro: string;coach: string;contest: string;award: string;teamMember: TeamMember[];
}

在这个定义中,teamMember 属性的类型被修改为 TeamMember[],表示一个 TeamMember 对象的数组。每个 TeamMember 对象包含了学生的学号、姓名、专业、年级等信息。

 

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

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

相关文章

Spring事务和事务传播机制(2)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中&#xff0c;事务管理是一种用于维护数据库操作的一致性和…

keepalived+lvs+nginx高并发集群

keepalivedlvsnginx高并发集群 简介&#xff1a; keepalivedlvsnginx高并发集群&#xff0c;是通过LVS将请求流量均匀分发给nginx集群&#xff0c;而当单机nginx出现状态异常或宕机时&#xff0c;keepalived会主动切换并将不健康nginx下线&#xff0c;维持集群稳定高可用 1.L…

0008Java程序设计-JSP学生成绩管理系统设计与实现

摘 要目录系统实现开发环境 摘 要 随着网络的不断发展&#xff0c;一个好的成绩查询系统&#xff0c;不仅便于学生查询成绩、查询个人信息&#xff0c;而且有利于管理员对学生成绩的统一管理&#xff0c;考试之后学生能及时的对个人信息进行查看&#xff0c;减少了老师和学生之…

React(8)

千锋学习视频https://www.bilibili.com/video/BV1dP4y1c7qd?p72&spm_id_frompageDriver&vd_sourcef07a5c4baae42e64ab4bebdd9f3cd1b3 1.React 路由 1.1 什么是路由&#xff1f; 路由是根据不同的 url 地址展示不同的内容或页面。 一个针对React而设计的路由解决方案…

优化广告运营,代理IP的作用不容忽视

在当今激烈的市场竞争中&#xff0c;广告投放早已成为企业营销的重要手段。广告投放不仅可以提高品牌知名度、产品可信度&#xff0c;还能够树立品牌形象&#xff0c;增强市场竞争力。然而&#xff0c;影响广告投放效果的因素很多&#xff0c;投放时间段、投放地区、在哪个平台…

iTwinCapture中文版原ContextCapture安装包以及安装教程

iTwinCapture软件安装教程 一、获取软件 中文安装包评论区或后台回复iTwinCapture 在App Store或Google Play搜索软件名称"iTwin Capture",下载安装软件。 您也可以在Bentley官网下载对应的iTwin Capture版本。 二、软件安装 点击下载后的安装包,根据提示完成安装…

环二肽16364-35-5,cyclo(Glu-Gly),环(甘氨酰-谷氨酸),产品特点介绍

中文名&#xff1a;环&#xff08;甘氨酰-谷氨酸&#xff09; 英文名&#xff1a;cyclo(Glu-Gly) CYCLO(-GLY-GLU) CAS&#xff1a;16364-35-5 分子式&#xff1a;C7H10N2O4 分子量&#xff1a;186.165 沸点&#xff1a; 666.840.0 C(Predicted) 表面张力&#xff08;dy…

【IMX6ULL驱动开发学习】08.马达驱动实战:驱动编写、手动注册平台设备和设备树添加节点信息

目录 一、使用设备树 1.1 修改设备树流程 二、手动创建平台设备 三、总结&#xff08;附驱动程序&#xff09; 前情提要&#xff1a;​​​​​​​【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树_阿龙还在写代码的博客-CSDN博客 手动注册…

前端界面设计

目录 1.兴趣展示网站1.效果2.核心代码展示3.源代码 2.优美的登录网页1.效果2.核心代码展示3.源代码 3.美女相册1.效果2.核心代码展示3.源代码 4.精美选项卡1.效果2.核心代码展示3.源代码 4. 自己写过的一些前端界面设计Demo整理。 1.兴趣展示网站 1.效果 2.核心代码展示 工程截…

【中危】 Apache NiFi 连接 URL 验证绕过漏洞 (CVE-2023-40037)

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具。 在受影响版本中&#xff0c;由于多个Processors和Controller Services在配置JDBC和JNDI JMS连接时对URL参数过滤不完全。使用startsWith方法过滤用户输入URL&#xff0c;导致过滤可以被绕过。攻击者可以通过构造特…

C++头文件和std命名空间

C 是在C语言的基础上开发的&#xff0c;早期的 C 还不完善&#xff0c;不支持命名空间&#xff0c;没有自己的编译器&#xff0c;而是将 C 代码翻译成C代码&#xff0c;再通过C编译器完成编译。 这个时候的 C 仍然在使用C语言的库&#xff0c;stdio.h、stdlib.h、string.h 等头…

探索Vue生命周期钩子函数:从创生到销毁

Vue这个引领前端开发潮流的框架&#xff0c;其优雅的响应式数据绑定和组件式开发方式&#xff0c;使得它备受瞩目。然而&#xff0c;Vue的魅力绝不仅限于此&#xff0c;它还赋予开发者一组神奇的生命周期钩子函数&#xff0c;能够在组件的各个成长阶段插入自定义代码。本文将带…

IPv6 基础概念

IPv6 基础概念 组播地址 IPv6的组播与IPv4相同&#xff0c;用来标识一组接口&#xff0c;一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点&#xff0c;组播地址…

二、Kafka快速入门

目录 2.1 安装部署1、【单机部署】2、【集群部署】 2.2 Kafka命令行操作1、查看topic相关命令参数2、查看当前kafka服务器中的所有Topic3、创建 first topic4、查看 first 主题的详情5、修改分区数&#xff08;注意&#xff1a;分区数只能增加&#xff0c;不能减少&#xff09;…

Red Hat Enterprise Linux (RHEL) 6.4 安装、redhat6.4安装

1、下载地址 Red Hat Enterprise Linux (RHEL) 6.4 DVD ISO 迅雷下载地址http://rhel.ieesee.net/uingei/rhel-server-6.4-x86_64-dvd.iso 2、创建虚拟机 3、redhat安装 选择第一个安装 Skip跳过检查 语言选择简体中文 键盘选择默认 选择基本存储设备 忽略所有数据 设置root密…

Verilog 入门

Verilog 入门 本内容来自 牛客网Verilog入门特别版 1、一个没有输入和一个输出常数1的输出的电路&#xff0c;输出信号为one module top_module(one);output wire one;assign one 1b1; endmodule2、创建一个具有一个输入和一个输出的模块&#xff0c;其行为类似于电路上的连…

Office ---- excel ---- 怎么批量设置行高

解决方法&#xff1a; 调整行高即可

在 IDEA 中使用 Git开发 图文教程

在 IDEA 中使用 Git开发 图文教程 一、连接远程仓库二、IDEA利用Git进行开发操作三、分支操作3.1 新建分支3.2 切换分支3.3 删除分支3.4 比较分支3.5 合并分支 四、常用快捷键 一、连接远程仓库 一、打开IDEA&#xff0c;进入目录&#xff1a;File ->New ->Project from…

十问华为云 Toolkit:开发插件如何提升云上开发效能

众所周知&#xff0c;桌面集成开发环境&#xff08;IDE&#xff09;已经融入到开发的各个环节&#xff0c;对开发者的重要性和广泛度是不言而喻的&#xff0c;而开发插件更是建立在IDE基础上的功能Buff。 Huawei Cloud ToolKit作为华为云围绕其产品能力向开发者桌面上的延伸&a…

数据结构——栈和队列

栈和队列的建立 前言一、栈1.栈的概念2.栈的实现3.代码示例&#xff08;1&#xff09;Stack.h&#xff08;2&#xff09;Stack.c&#xff08;3&#xff09;Test.c&#xff08;4&#xff09;运行结果&#xff08;5&#xff09;完整代码演示 二、队列1.队列的概念2.队列的实现3.代…