element-ui table span-method(行合并)的实现代码


Posted in Javascript onDecember 20, 2018

element-ui官网中关于行合并的例子是根据行号进行合并的,这显然不符合我们日常开发需求,因为通常我们table中的数据都是动态生成的,所以需要做一些修改。我们首先解读一下官网实例中的各参数的意义:

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) {  //用于设置要合并的列
     if (rowIndex % 2 === 0) {  //用于设置合并开始的行号
      return {
       rowspan: 2,
 //合并的行数
       colspan: 1     //合并的列数,设为0则直接不显示
      };
     } else {
      return {
       rowspan: 0,
       colspan: 0
      };
     }
    }
   }

研究这个例子后不难发现,实现合并行的方法其实在每一行数据渲染的时候都会执行,只不过在渲染过程中我们设置了它合并的行数和列数,以得到不同的效果。所以我们需要生成一个与行数相同的数组记录每一行设置的合并数。处理过程如下:

getSpanArr(data) { 
 for (var i = 0; i < data.length; i++) {
    if (i === 0) {
       this.spanArr.push(1);
       this.pos = 0
    } else {
     // 判断当前元素与上一个元素是否相同
  if (data[i].name === data[i - 1].name) {
        this.spanArr[this.pos] += 1;
        this.spanArr.push(0);
       } else {
        this.spanArr.push(1);
        this.pos = i;
       }
    }
  }
},

data就是我们从后台拿到的数据,通常是一个数组;spanArr是一个空的数组,用于存放每一行记录的合并数;pos是spanArr的索引。上述代码意思是:如果是第一条记录(索引为0),向数组中加入1,并设置索引位置;如果不是第一条记录,则判断它与前一条记录是否相等,如果相等,则向spanArr中添入元素0,并将前一位元素+1,表示合并行数+1,以此往复,得到所有行的合并数,0即表示该行不显示。

cellMerge({ row, column, rowIndex, columnIndex }) {
   if (columnIndex === 0) {
      const _row = this.spanArr[rowIndex];
      const _col = _row > 0 ? 1 : 0;
      return {
         rowspan: _row,
         colspan: _col
      }
   }
},

然后根据得到的数组spanArr对表格进行合并渲染,并绑定合并方法

<el-table
   border
   :data="tableData"
   style="width: 100%;max-height: 160px;overflow: auto"
   :span-method="cellMerge">
  ......
</el-table>

效果图如下:

element-ui table span-method(行合并)的实现代码

注:后台获取数据的时候根据要在前台进行合并的字段进行排序,使要合并的字段值相同的记录依次相邻。

合并多行的情况

arraySpanMethod ({ row, column, rowIndex, columnIndex }) {
   if (rowIndex === 1) {
    // 合并第二行
    if (columnIndex === 1) {
     // 从第二列开始
     return [2, 3]
     // 这里返回的是行和列的合并数量,可以返回一个数组,也可以返回一个对象,效果一样
     // 这里rowspan为2是行有两行合并,colspan为3是列有3列合并,你要合并几行几列就写上相应的数字

     // 这个判断是把第一行的第3列,第4列的值省略,在合并的表格右边直接填原先第5列的值,合并了几列,就省略几列的值
    } else if (columnIndex === 2 || columnIndex === 3) {
     return [0, 0]
    }
   } else if (rowIndex === 2 && (columnIndex === 1 || columnIndex === 2 || columnIndex === 3)) {
    // 第二行的第2个数,第3个数,第4个数都要省略
    return [0, 0]
   }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js实现上传图片前的预览(TX的面试题)
Aug 14 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
Mar 22 Javascript
Javascript 面向对象之重载
May 04 Javascript
加载jQuery后$冲突的解决办法
Jul 09 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 Javascript
jquery实现可关闭的倒计时广告特效代码
Sep 02 Javascript
JavaScript创建对象的常用方式总结
Aug 10 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
Nuxt.js之自动路由原理的实现方法
Nov 21 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
Mar 07 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
fetch 如何实现请求数据
Dec 20 #Javascript
JS闭包经典实例详解
Dec 20 #Javascript
JS闭包原理与应用经典示例
Dec 20 #Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 #Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 #Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 #Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 #Javascript
You might like
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
学习php开源项目的源码指南
2014/12/21 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
浅谈PHP封装CURL
2019/03/06 PHP
jQuery 剧场版 你必须知道的javascript
2009/05/27 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
vue-router history模式下的微信分享小结
2018/07/05 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
python模拟enum枚举类型的方法小结
2015/04/30 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
python队列Queue的详解
2019/05/10 Python
Python完全识别验证码自动登录实例详解
2019/11/24 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
小学生手册家长评语
2014/04/16 职场文书
合伙经营协议书
2014/04/18 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
大专护理专业自荐信
2015/03/25 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
班委竞选稿范文
2015/11/21 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js