el-table渲染二级对象数组

news2025/1/18 8:37:30

1、序言

        项目地址如下:https://gitee.com/liu-wenxin/complexELTable.git        

        想要渲染这样的数据:

        el-table官网给的例子都是一级对象数组,如果想要渲染二级对象数组,直接

:table = tableData 这样el-table渲染是不成功的!我想过能否在<el-table></el-table>中直接使用<template slot-scope="scope"></template>去获取scope.row.memberList,然后在遍历scope.row.memberList生成<el-table-column></el-table-column>,然而这是不可行的,<template slot-scope="scope"></template> 必须在 <el-table-column></el-table-column>标签里面使用,如下2、3、4是我的实现方式以及一些思考!

2、表格嵌套(不推荐)

        在<el-table-column></el-table-column>嵌套<el-table></el-table> ,然后通过插槽row.memberList方式去赋值给data,效果如图所示:

        优点:确实实现了渲染二级对象数组的效果

        缺点:如果二级对象数组很长,我想对比不同行的不同模块的数据就会不直观,比如:我想要比较高一工科、高二工科数据就不方便,还要反复上下滚动,不直观!

<template>
    <div>
        <el-table :data="tableData" border style="width: 100%">
            <el-table-column prop="grade" label="年级" width="180"></el-table-column>
            <el-table-column>
                <template slot-scope="{row}">
                    <el-table :data="row.memberList" border style="width: 100%">
                        <el-table-column prop="category" label="类型"></el-table-column>
                        <el-table-column prop="people" label="总人数"></el-table-column>
                        <el-table-column prop="boy" label="男"></el-table-column>
                        <el-table-column prop="girl" label="女"></el-table-column>
                    </el-table>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>

<script>
export default {
    name: 'Demo1',
    data() {
        return {

            tableData: [
                {
                    grade: '高一',
                    memberList: [
                        { category: '文科', people: 300, boy: 40, girl: 260, },
                        { category: '理科', people: 210, boy: 150, girl: 60 },
                    ]
                },
                {
                    grade: '高二',
                    memberList: [
                        { category: '文科', people: 100, boy: 40, girl: 60, },
                        { category: '理科', people: 200, boy: 160, girl: 40 },
                    ]
                },
                {
                    grade: '高三',
                    memberList: [
                        { category: '文科', people: 150, boy: 50, girl: 100, },
                        { category: '理科', people: 230, boy: 100, girl: 130 },
                    ]
                },
            ]
        }
    }
}
</script>

<style  scoped></style>

3、树形控件结合表格(不推荐)

        这种二级对象数组可以把下图的grade抽出来放在一个数组,将数组放在el-tree树形组件中,点击树形结构中的数据,将选中的数据在tableData中查询(也就是filter数组过滤),从而把memberList过滤出来,赋值到右侧的表格数组,从而实现类似索引查找功能!

        代码如下:

<template>
    <div>
        <el-row :gutter="10">
            <el-col :span="5" :md="5">
                <!-- 树形结构 -->
                <el-tree :data="leftData" highlight-current :props="defaultProps" @node-click="handleNodeClick"></el-tree>
            </el-col>
            <el-col :span="19" :md="19">
                <!-- 表格 -->
                <el-table :data="rightData" border style="width: 100%">
                    <el-table-column prop="category" label="类型"></el-table-column>
                    <el-table-column prop="people" label="总人数"></el-table-column>
                    <el-table-column prop="boy" label="男"></el-table-column>
                    <el-table-column prop="girl" label="女"></el-table-column>
                </el-table>
            </el-col>
        </el-row>
    </div>
</template>

<script>
export default {
    data() {
        return {
            tableData: [
                {
                    grade: '高一',
                    memberList: [
                        { category: '文科', people: 300, boy: 40, girl: 260, },
                        { category: '理科', people: 210, boy: 150, girl: 60 },
                    ]
                },
                {
                    grade: '高二',
                    memberList: [
                        { category: '文科', people: 100, boy: 40, girl: 60, },
                        { category: '理科', people: 200, boy: 160, girl: 40 },
                    ]
                },
                {
                    grade: '高三',
                    memberList: [
                        { category: '文科', people: 150, boy: 50, girl: 100, },
                        { category: '理科', people: 230, boy: 100, girl: 130 },
                    ]
                },
            ],
            rightData: [],
            leftData: [],
            defaultProps: {
                label: 'grade'
            }
        }
    },
    created() {
        this.generateLeftData();
    },
    methods: {
        // 树形结构点击事件
        handleNodeClick(data) {
            this.searchData(data.grade);
        },
        // 根据tableData生成左边数据
        generateLeftData() {
            this.leftData = this.tableData.map(item => { return { grade: item.grade } })
        },
        // 点击左侧树形结构,查找tableData,并将搜索结果赋值到右侧表格
        searchData(searchData) {
            this.rightData = this.tableData.find(item => item.grade == searchData).memberList
        }
    }
}
</script>

<style scoped></style>

        优点:实现了效果

        缺点:不能对比、不直观! 

4、多表头(推荐)

        我们可以像官网那样使用多表头来渲染二级对象数组,不过官网的多表头是写死的,

是el-table-column的多层嵌套,数据还是一级对象数组 

 

 

         

        这种情况下,我们要分析一下数据结构,哪部分是固定不变的,哪部分是变化的

        把固定的部分抽离出来:

// 二级表头名称映射
columnMap: {
                people: '人数',
                boy: '男',
                girl: '女'
           },
// 二级表头字段
columnList: ['people', 'boy', 'girl'],

// 一级表头
tyleList: ['文科', '理科'],
  • 首先遍历typeList
  • 其次遍历columnList
  • 最后根据<template slot-scope="scope"></template>获取行数据,获取row.memberList

        最终效果:这样就非常直观清晰了,对比度很明显,便于数据分析了!

        代码如下:

<template>
    <div>
        <el-table :data="tableData" border style="width: 100%">
            <el-table-column prop="grade" label="年级" width="180"></el-table-column>
            <el-table-column v-for="(item, index) in tyleList" :label="item" align="center">
                <el-table-column v-for="(i, j) in columnList" :label="columnMap[i]">
                    <template slot-scope="{row}">
                        {{ row.memberList[index][i] }}
                    </template>
                </el-table-column>
            </el-table-column>
        </el-table>
    </div>
</template>

<script>
export default {
    data() {
        return {
            columnMap: {
                people: '人数',
                boy: '男',
                girl: '女'
            },
            columnList: ['people', 'boy', 'girl'],
            tyleList: ['文科', '理科'],
            tableData: [
                {
                    grade: '高一',
                    memberList: [
                        { category: '文科', people: 300, boy: 40, girl: 260, },
                        { category: '理科', people: 210, boy: 150, girl: 60 },
                    ]
                },
                {
                    grade: '高二',
                    memberList: [
                        { category: '文科', people: 100, boy: 40, girl: 60, },
                        { category: '理科', people: 200, boy: 160, girl: 40 },
                    ]
                },
                {
                    grade: '高三',
                    memberList: [
                        { category: '文科', people: 150, boy: 50, girl: 100, },
                        { category: '理科', people: 230, boy: 100, girl: 130 },
                    ]
                },
            ]
        }
    }
}
</script>

<style lang="scss" scoped></style>

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

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

相关文章

RadEx Pro处理电火花数据操作步骤(下)

RadEx Pro处理电火花数据操作步骤&#xff08;上&#xff09;主要讲述RadEx Pro读取电火花数据&#xff0c;查看数据的质量&#xff0c;以及简单的滤波和振幅纠正。 6、海底拾取&#xff0c;建立流程060 seafloor pick Trace Input加载stack数据集 Trace Header Math&#x…

【人工智能】— 维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析

【人工智能】— 维度灾难、降维、主成分分析PCA、获取旧数据、非线性主成分分析 高维数据与维度灾难维度灾难降维为什么需要降维&#xff1f;PRINCIPLE COMPONENT ANALYSIS主成分的几何图像最小化到直线距离的平方和举例主成分的代数推导优化问题计算主成分&#xff08;Princip…

【Pandas】pandas用法解析(上)

目录 一、生成数据表 1.导入pandas库 2.导入CSV或者xlsx文件 3.用pandas创建数据表 二、数据表信息查看 1.维度查看 2.数据表基本信息&#xff08;维度、列名称、数据格式、所占空间等&#xff09; 3.每一列数据的格式 4.某一列格式 5.空值判断 6.查看某一列空值 7…

黑马程序员前端 Vue3 小兔鲜电商项目——(七)详情页

文章目录 路由配置模板代码配置路由链接跳转 渲染基础数据封装接口渲染数据 热榜区域模板代码封装接口渲染数据 图片预览组件封装小图切换大图显示模版代码绑定事件 放大镜效果图片优化 SKU组件熟悉全局组件统一插件化插件化开发插件注册 路由配置 模板代码 创建 src\views\D…

快速排序-详解附Python代码

排序思路 取一个元素P&#xff08;第一个元素&#xff09;&#xff0c;目标是使得元素P归位&#xff1b;列表被元素P分成了两个部分&#xff0c;左边的比P小&#xff0c;右边的比P大&#xff1b;分别再对左右两个部分的列表重复1&#xff0c;2步骤&#xff0c;递归完成排序 评…

7Z010 引脚功能详解

本文针对7Z010芯片&#xff0c;详细讲解硬件设计需要注意的技术点&#xff0c;可以作为设计和检查时候的参考文件。问了方便实用&#xff0c;按照Bank顺序排列&#xff0c;包含配置Bank、HR Bank、HP Bank、GTX Bank、供电引脚等。 参考文档包括&#xff1a; ds187-XC7Z010-X…

前端编写贪吃蛇游戏-附详细代码

当我们在前端编写贪吃蛇游戏时&#xff0c;可以按照以下步骤进行&#xff1a; 先看截图&#xff1a; 设置游戏板&#xff1a;创建一个HTML元素作为游戏板&#xff0c;可以使用<div>元素&#xff0c;并为其设置合适的样式。 绘制蛇和食物&#xff1a;使用JavaScript代码…

【Linux 基础入门 + Java项目部署】

文章目录 Linux 基础入门1 Linux 简介1.1不同应用领域的主流操作系统1.2 Linux发展历史与 Linux系统版本 2 Linux 安装2.1 安装方式介绍2.2 安装Linux2.3 网卡设置2.4 安装SSH连接工具 Linux和Windows目录结构对比3 Linux 常用命令3.1 Linux命令初体验3.2 文件目录操作命令lscd…

7A50T 引脚功能详解

本文针对7A50T芯片&#xff0c;详细讲解硬件设计需要注意的技术点&#xff0c;可以作为设计和检查时候的参考文件。问了方便实用&#xff0c;按照Bank顺序排列&#xff0c;包含配置Bank、HR Bank、HP Bank、GTP Bank、供电引脚等。 参考文档包括&#xff1a; ds181_Artix_7_D…

day59_layuimini_crud

今日内容 一、Layui Mini 零、 复习昨日 写在前面的前面 项目开发模式 前端后端数据怎么传输?前端发数据到后台 from,a,ajax, 后端发数据到前端 以前是使用servlet技术,将数据存入请求域/会话域,后台跳转页面到前端,前端jsp页面展现数据现在使用前后分离技术,后端将数据封装成…

【消费战略】解读100个食品品牌丨红海缝隙杀出的乳品独角兽 “认养一头牛”!

认养一头牛品牌历程 2014 年 在河北故城建立第一座大型现代化牧场&#xff0c;从澳洲引进6000头荷斯坦奶牛。 2016 年 11月&#xff0c;在杭州正式创立认养一头牛品牌。 2018年 与天猫达成战略合作&#xff0c;开启会员运营时代。 2020年 跻身天猫“双十一”亿元俱乐部…

Python学习笔记(2)--字面量,注释,变量,数据类型,数据类型转换,标识符,运算符

传送门>B站黑马python入门教程 目录 1.字面量2.注释3.变量4.数据类型5.数据类型转换6.标识符7.运算符算术运算符赋值运算符 1.字面量 字面量: 代码中被固定写的值 python常用的6种数据类型为 数字,字符串,列表,元组,集合,字典 目前基础部分学习字符串,整数,浮点数即可 字符…

UE5 蓝图节点常用大全(持续更新)

文章目录 前言蓝图节点前言 本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,并有中英文节点名称可参考。 蓝图节点 英文中文节点说明Set Visibility设置可视性New Visibility:勾选时可视场景组件Propagate to Children:勾选时子项受影响Destroy Actor销毁Actor销毁…

day60_echarts

Echarts ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供直观&#xff0c;生动&#xff0c;可交互&#xff0c;可个性化定制的数据可视化图表。ECharts最初由百度团队开源&#xff0c;并于2018年初捐赠给Apache基金会&#xff0c;成为ASF孵化级项目。 2021年1月…

【Python】异常处理 ② ( 异常类型简介 | 捕获并处理指定异常 | 捕获多个类型异常 )

文章目录 一、Python 捕获指定类型异常1、异常类型简介2、捕获并处理指定异常3、代码实例 - 捕获并处理指定异常4、代码实例 - 异常捕获失败案例 二、Python 捕获多个类型异常1、捕获多个异常语法2、代码实例 - 捕获多个异常 一、Python 捕获指定类型异常 1、异常类型简介 Pyth…

原生HTML+CSS+JS制作自己的导航主页

如果你想使用原生HTML、CSS和JS制作自己的导航主页&#xff0c;你可以按照以下步骤进行操作&#xff1a; 先看效果图&#xff1a; 创建HTML文件&#xff1a;首先&#xff0c;创建一个新的HTML文件&#xff0c;并在文件中添加基本的HTML结构。你可以使用<!DOCTYPE html>…

【软件设计师暴击考点】计算机组成原理与体系结构高频考点暴击系列【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

【Python】怎样能够除去三维图中超出坐标轴范围内的图形(绘制一个三维地形图,需要求大于某一个水平高度的区域)

要除去三维图中超出坐标轴范围内的图形&#xff0c;可以通过设置绘图参数和使用条件筛选来实现。下面是一种常用的方法&#xff1a; 绘制三维地形图&#xff0c;确保数据和坐标轴设置正确。选择图形对象&#xff08;例如&#xff0c;地形曲面&#xff09;并进入编辑模式。找到…

【博弈论笔记】第六章 不完全信息静态表示

文章目录 第六章 不完全信息静态表示6.1 不完全信息静态博弈和贝叶斯纳什均衡6.1.1 不完全信息静态博弈的例子6.1.2 不完全信息静态博弈的一般表示6.1.3 海萨尼均衡6.1.4 贝叶斯纳什均衡 6.2 暗标拍卖Summary 此部分博弈论笔记参考自经济博弈论&#xff08;第四版&#xff09;/…

YOLOV1论文解读及代码讲解

YoloV1论文解读 摘要 我们提出了一种新的物体检测方法&#xff1a;YOLO。之前的物体检测工作都是重新利用分类器来执行检测。相反&#xff0c;我们将物体检测视为一个回归问题&#xff0c;针对空间分离的边界框和相关类别概率。一个单一的神经网络可以在一次评估中直接从完整…