iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Element如何实现复杂table表格结构
  • 444
分享到

Element如何实现复杂table表格结构

2023-07-05 12:07:26 444人浏览 泡泡鱼
摘要

这篇文章主要介绍“Element如何实现复杂table表格结构”,在日常操作中,相信很多人在Element如何实现复杂table表格结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Element如何实现复杂

这篇文章主要介绍“Element如何实现复杂table表格结构”,在日常操作中,相信很多人在Element如何实现复杂table表格结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Element如何实现复杂table表格结构”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Element-UI组件el-table用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。

将使用到以下两项,来完成今天demo演示:

多级表头:数据结构比较复杂的时候,可使用多级表头来展现数据的层次关系。

合并行或列:多行或多列共用一个数据时,可以合并行或列。

需要实现的表格如下图:

Element如何实现复杂table表格结构

一、安装element-ui

使用npm进行安装:

npm i element-ui -S

二、表头实现

这里表头实现比较简单,代码如下:

<template>  <div>    <el-table :data="tableStudentData" :span-method="reconstructionStuCell" >      <el-table-column type="index" label="序号" width="50"></el-table-column>      <el-table-column prop="name" label="姓名" width="80"></el-table-column>      <el-table-column label="科目信息">        <el-table-column prop="courseName" label="科目" width="80"></el-table-column>        <el-table-column prop="date" label="日期" width="80"></el-table-column>        <el-table-column prop="timeStr" label="考试时间" width="100"></el-table-column>      </el-table-column>      <el-table-column label="成绩信息">        <el-table-column prop="score" label="成绩" width="60"></el-table-column>        <el-table-column prop="scoreTotal" label="总分" width="60"></el-table-column>        <el-table-column prop="total" label="满分" width="60"></el-table-column>        <el-table-column prop="totalAll" label="满分总分" width="100">          <template slot-scope="scope">            <span v-if="scope.row.totalAll">{{scope.row.totalAll}} (及格率:{{parseInt(scope.row.scoreTotal/scope.row.totalAll*100)}}%)</span>          </template>        </el-table-column>      </el-table-column>    </el-table>      </div></template> <script>  export default {    data(){      return {        tableData: [],        tableStudentData: []      }    },    created() {     },    methods: {            reconstructionStuCell({ row, column, rowIndex, columnIndex }){              }      //end    }  }</script> <style lang="sCSS"> </style>

此时表头效果已形成,如下图:

Element如何实现复杂table表格结构

三、数据渲染

数据渲染这里较为复杂,这里为方便大家理解,进行逐步拆解叙述。如有更好方法,也欢迎大家指点。

3.1 模拟数据

Element如何实现复杂table表格结构

如上图,在element-table目录中,新建data.js文件,用于存储模拟数据,代码如下:

export const studentData = [  {name: "李四", subject: [    {courseName: "语文", date: "20日", timeStr: "09:00~11:30", score: 90, total: 150},    {courseName: "政治", date: "20日", timeStr: "14:30~16:30", score: 70, total: 100},    {courseName: "数学", date: "21日", timeStr: "09:00~11:30", score: 100, total: 150},    {courseName: "历史", date: "21日", timeStr: "14:30~16:30", score: 72, total: 100},    {courseName: "英语", date: "22日", timeStr: "09:00~11:30", score: 95, total: 150},  ]},  {name: "王五", subject: [    {courseName: "语文", date: "20日", timeStr: "09:00~11:30", score: 85, total: 150},    {courseName: "政治", date: "20日", timeStr: "14:30~16:30", score: 60, total: 100},    {courseName: "数学", date: "21日", timeStr: "09:00~11:30", score: 90, total: 150},    {courseName: "历史", date: "21日", timeStr: "14:30~16:30", score: 68, total: 100},    {courseName: "英语", date: "22日", timeStr: "09:00~11:30", score: 75, total: 150},  ]},  {name: "小美", subject: [    {courseName: "语文", date: "20日", timeStr: "09:00~11:30", score: 120, total: 150},    {courseName: "政治", date: "20日", timeStr: "14:30~16:30", score: 85, total: 100},    {courseName: "数学", date: "21日", timeStr: "09:00~11:30", score: 120, total: 150},    {courseName: "历史", date: "21日", timeStr: "14:30~16:30", score: 80, total: 100},    {courseName: "英语", date: "22日", timeStr: "09:00~11:30", score: 130, total: 150},  ]}];

页面中引入模拟数据,并赋值给表格的变量,代码如下:

<script>  import { studentData } from './data.js'  export default {    data(){      return {        tableStudentData: studentData      }    },    created() { },    methods: {            reconstructionStuCell({ row, column, rowIndex, columnIndex }){              }      //end    }  }</script>

此时表格中可以正常渲染出部分数据了,效果图如下:

Element如何实现复杂table表格结构

3.2 数据处理

如上图会发现,科目和成绩相关信息,未显示出来。这里需要对数据进行处理下,将所有科目信息调整到 和姓名字段为同一行数据中。需要做以下几步:

  • 将subject二级数据全部移至name同级的同一行数据中。

  • 将name字段原数据移至subject的第一行数据中;item和sub进行合并。

  • 无subject子项数据的,保持原数据输出。

在data.js中,添加重构数据reconstructionStuData()函数,代码如下:

export const reconstructionStuData = data => {  if(!Array.isArray(data)) return [];   let tmpData = [];  data.forEach((item, i) => {    //有二级数据的进行处理    if(Array.isArray(item.subject)&&item.subject.length>0){      //循环成绩      item.subject.forEach((sub, j) => {        let subData = {};        if(j==0){          //子项第一行数据,和姓名信息同行          subData = Object.assign({ }, item, sub);        }        //其他行数据无须添加 姓名字段信息(第一行数据会合并到结束位置,填充后也会被覆盖)        else{          subData = Object.assign({ }, sub);        }        //if end        tmpData.push( subData );      });    }    //subject无子项数据,保留当前位置输出    else{      tmpData.push(        Object.assign({ }, item)      );    }  });   return tmpData;}

引入reconstructionStuData()函数,代码如下:

<script>  import { reconstructionStuData, studentData } from './data.js'  export default {    data(){      return {        tableStudentData: studentData      }    },    created() {      this.tableStudentData = reconstructionStuData(studentData);    },    methods: {            reconstructionStuCell({ row, column, rowIndex, columnIndex }){              }      //end    }  }</script>

此时表格效果图如下:

Element如何实现复杂table表格结构

3.3 图解

Element如何实现复杂table表格结构

如上图,

  • 列(姓名)位于列的第1位置(起始从0开始,所以序号为第0位置),往下合并subject数组长度位置即可。

  • 列(总分)位于列的第6位置,往下合并subject数组长度位置即可。

  • 列(满分总分)位于列的第8位置,往下合并subject数组长度位置即可。

这是我们会发现,methods中定义的reconstructionStuCell()函数还未使用,通过给table传入span-method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。 也可以返回一个键名为rowspan和colspan的对象。

span-method相当于从数据单元格第一行开始,每行每列开始循环执行,想当于 9 * 15 执行135次,通过函数中 rowIndex, columnIndex字段进行判断当前循环是哪行哪列,并作对应处理。

这里我们添加以下逻辑,在每行数据中添加姓名、总分,满分总分对应columnIndex1、columnIndex6、columnIndex8字段,用来存储需要返回的colspan和rowspan数据,代码如下:

reconstructionStuCell({ row, column, rowIndex, columnIndex }){    let column1Data = row['columnIndex1'];    let column6Data = row['columnIndex6'];    let column8Data = row['columnIndex8'];        //判断条件满足情况下,返回对应的rowspan和colspan数据    if(      (column1Data&&column1Data.columnIndex==columnIndex) ||      //姓名组合并      (column6Data&&column6Data.columnIndex==columnIndex) ||      //总分组合并      column8Data&&column8Data.columnIndex==columnIndex           //满分总分组合并    ){      return {        rowspan: column1Data.rowspan,        colspan: column1Data.colspan      }    }    //if end  }
比如执行span-method方法时,此时获取row数据中columnIndex1,columnIndex1中的columnIndex值为1,与span-method方法中columnIndex进行对比。
1、此时每行中列1都会被匹配到,列1行1返回{colspan: 1, rowspan: 5},则往下合并5个单元格;
2、列1行2返回{colspan: 0, rowspan: 0},则单元格不渲染,否则此行多一个单元格会错位;
3、列1行3,列1行4...... 同理。

列6(总分)、列8(满分总分)同理,通过columnIndex6和columnIndex8进行判断,进行单元格合并。

以上代码添加后,发现表格并无任何变化,这是因为重构数据函数中,还未添加对应的columnIndex1、columnIndex6、columnIndex8字段。

3.4 合并列 - 姓名

首先,我们来合并(姓名)这列数据,将每行数据中添加columnIndex1,子属性变量columnIndex表示合并对应的列位置。

subject有子项数据除第一行数据,后面所有rowspan和colspan为0,第1个单元往下合并后,会填充其他行空缺位置。

subject无子项数据rowspan和colspan为1,保留原位置渲染。如为0则当前单元格不被渲染,表格会错乱。

代码如下:

export const reconstructionStuData = data => {  if(!Array.isArray(data)) return [];   let tmpData = [];  data.forEach((item, i) => {    //有二级数据的进行处理    if(Array.isArray(item.subject)&&item.subject.length>0){      //循环成绩      item.subject.forEach((sub, j) => {        let subData = {};        if(j==0){          //子项第一行数据,和姓名信息同行          subData = Object.assign({ columnIndex1: { columnIndex: 1, rowspan: item.subject.length, colspan: 1 } }, item, sub);        }        //其他行数据无须添加 姓名字段信息(第一行数据会合并到结束位置,填充后也会被覆盖)        else{          subData = Object.assign({ columnIndex1: { columnIndex: 1, rowspan: 0, colspan: 0 } }, sub);        }        //if end        tmpData.push( subData );      });    }    //无子项数据,保留当前位置输出    else{      tmpData.push(        Object.assign({ columnIndex1: { columnIndex: 1, rowspan: 1, colspan: 1 } }, item)      );    }  });   return tmpData;}

此时大家看到表格的(姓名)列,已合并到对应长度,效果图如下:

Element如何实现复杂table表格结构

3.5 合并列 - 总分和满分总分

总分和满分总分合并部分,和(姓名)列同理,但多出一步则需计算出对应科目的总分 和 所有科目的满分总分。

增加第6列和第8列合并数据columnIndex6和columnIndex8,并新增scoreTotal和totalAll分别保存总分和满分总分结果。

代码如下:

export const reconstructionStuData = data => {  if(!Array.isArray(data)) return [];   let tmpData = [];  data.forEach((item, i) => {    //有二级数据的进行处理    if(Array.isArray(item.subject)&&item.subject.length>0){      //循环成绩      item.subject.forEach((sub, j) => {        let subData = {};        if(j==0){          //子项第一行数据,和姓名信息同行          subData = Object.assign({ columnIndex1: { columnIndex: 1, rowspan: item.subject.length, colspan: 1 } }, item, sub);           //计算总分          subData['scoreTotal'] = item.subject.reduce((total, value) => {            return total + value.score;          }, 0);          subData['columnIndex6'] = { columnIndex: 6, rowspan: item.subject.length, colspan: 1 };          //计算满分总分          subData['totalAll'] = item.subject.reduce((total, value) => {            return total + value.total;          }, 0);          subData['columnIndex8'] = { columnIndex: 8, rowspan: item.subject.length, colspan: 1 };        }        //其他行数据无须添加 姓名字段信息(第一行数据会合并到结束位置,填充后也会被覆盖)        else{          subData = Object.assign({ columnIndex1: { columnIndex: 1, rowspan: 0, colspan: 0 } }, sub);           //总分和满分总分 被合并部分单元格填写为0          subData['columnIndex6'] = { columnIndex: 6, rowspan: 0, colspan: 0 };          subData['columnIndex8'] = { columnIndex: 8, rowspan: 0, colspan: 0 };        }        //if end        tmpData.push( subData );      });    }    //无子项数据,保留当前位置输出    else{      tmpData.push(        Object.assign({ columnIndex1: { columnIndex: 1, rowspan: 1, colspan: 1 } }, item)      );    }  });   return tmpData;}

此时,咱们需要的表格就被渲染出来了,如下图:

Element如何实现复杂table表格结构

这里reconstructionStuData()函数处理能力还是相对不足,只能处理特定的表格合并。

到此,关于“Element如何实现复杂table表格结构”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Element如何实现复杂table表格结构

本文链接: https://www.lsjlt.com/news/351747.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Element如何实现复杂table表格结构
    这篇文章主要介绍“Element如何实现复杂table表格结构”,在日常操作中,相信很多人在Element如何实现复杂table表格结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Element如何实现复杂...
    99+
    2023-07-05
  • Element实现复杂table表格结构的项目实践
    目录一、安装element-ui二、表头实现三、数据渲染3.1 模拟数据3.2 数据处理3.3 图解3.4 合并列 - 姓名3.5 合并列 - 总分和满分总分Element-UI组件...
    99+
    2023-03-15
    Element 复杂表格结构 Element 复杂表格
  • element-table如何实现自定义表格排序
    目录element-table 自定义表格排序第一步第二步原理element-table表格 自定义排序规则项目需求使用element-table 自定义表格排序 第一步 在el-t...
    99+
    2024-04-02
  • vue中Element-ui表格怎么实现树形结构表格
    这篇文章主要为大家展示了“vue中Element-ui表格怎么实现树形结构表格”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中Element-ui表格怎么实现树形结构表格”这篇文章吧。本文...
    99+
    2023-06-15
  • android如何实现复杂表格控件
    Android中可以使用RecyclerView和GridLayoutManager来实现复杂表格控件。下面是一个简单的示例代码:1...
    99+
    2023-09-14
    android
  • Vue中Element的table多选表格如何实现单选
    目录Element的table多选表格实现单选vue table单选逻辑Element的table多选表格实现单选 效果图 1.在多选表格的基础上进行处理, 呈现单选表格的作用 2...
    99+
    2024-04-02
  • element table 表格控件实现单选功能
    项目中实现 table 表格控件单选功能,如图: 基本代码如下: 1、template 代码中: <el-table :data="tableData" bo...
    99+
    2024-04-02
  • vue如何实现树形结构表格
    这篇文章主要讲解了“vue如何实现树形结构表格”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现树形结构表格”吧!在el-table中,支持树类型的数据的显示。当 row 中包含&...
    99+
    2023-07-04
  • Java编程算法:如何实现复杂数据结构?
    Java是一种高级编程语言,它有着强大的编程能力和广泛的应用范围。在Java中,数据结构是编程中最重要的概念之一,因为它能够帮助我们处理和组织数据,从而实现更高效的算法和程序。而对于复杂数据结构的实现,更是Java编程中的重要话题。本文将...
    99+
    2023-07-29
    编程算法 异步编程 path
  • 如何通过容器实现复杂的数据结构?
    在计算机科学中,数据结构是指组织和存储数据的方式。复杂的数据结构可以用于解决各种问题,例如图形算法、自然语言处理、机器学习等。本文将介绍如何通过容器实现复杂的数据结构,并提供一些演示代码。 容器是一种数据类型,用于存储和组织数据。C++中...
    99+
    2023-06-01
    leetcode 编程算法 容器
  • Angualrjs和bootstrap相结合如何实现数据表格table
    这篇文章主要介绍Angualrjs和bootstrap相结合如何实现数据表格table,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!AngularJS的数据表格需要使用anguala...
    99+
    2024-04-02
  • vueElement-ui表格实现树形结构表格
    本文实例为大家分享了Element-ui表格实现树形结构表格的具体代码,供大家参考,具体内容如下 前端效果展示: 在el-table中,支持树类型的数据的显示。当 row 中包含&...
    99+
    2024-04-02
  • Vue如何实现table表格置顶
    目录如何实现table表格置顶置顶前置顶后点击table表格某一行让其置顶如何实现table表格置顶 老大让做vue项目,可是我对vue还不熟,抓紧时间学习,记录 此处省略css &...
    99+
    2024-04-02
  • element-ui表格如何实现单元格可编辑
    这篇文章主要介绍element-ui表格如何实现单元格可编辑,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下所示:<template>  <el-tab...
    99+
    2024-04-02
  • element-ui中Table表格省市区合并单元格怎么实现
    这篇文章主要为大家展示了“element-ui中Table表格省市区合并单元格怎么实现”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“element-ui中Tab...
    99+
    2024-04-02
  • Node.js LoopBack 进阶:实现复杂的数据结构
    hasOne: 定义一个一对一的关系,其中一个模型只属于一个另一个模型。 hasMany: 定义一个一对多关系,其中一个模型可以属于多个另一个模型。 belongsTo: 定义一个多对一的关系,其中多个模型可以属于一个另一个模型。 多...
    99+
    2024-04-02
  • Angular如何实现较为复杂的表格过滤,删除功能
    这篇文章主要介绍了Angular如何实现较为复杂的表格过滤,删除功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:先来看看运行效果...
    99+
    2024-04-02
  • VUE中element-ui如何实现一个复用Table组件
    小编给大家分享一下VUE中element-ui如何实现一个复用Table组件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!步骤一先来个基本的表格展示官例的tableDatatableDat...
    99+
    2024-04-02
  • mysql如何复制表结构
    MySQL中复制表结构可以使用CREATE TABLE语句复制表的结构。具体步骤如下: 打开MySQL客户端或使用可视化工具连接到...
    99+
    2024-04-09
    mysql
  • element ui表格如何实现下拉筛选功能
    这篇文章主要讲解了“element ui表格如何实现下拉筛选功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“element ui表格如何实现下拉筛选功能”吧!default-sort中pr...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作