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 相关文章推荐
javascript appendChild,innerHTML,join性能比较代码
Aug 29 Javascript
类似CSDN图片切换效果脚本
Sep 17 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
jquery阻止冒泡事件使用模拟事件
Sep 06 Javascript
jquery插件jquery倒计时插件分享
Dec 27 Javascript
JS清除选择内容的方法
Jan 29 Javascript
Bootstrap入门书籍之(一)排版
Feb 17 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
AngularJs ng-change事件/指令的用法小结
Nov 01 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
Jul 20 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执行速度全攻略(下)
2006/10/09 PHP
phpMyAdmin 安装及问题总结
2009/05/28 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
php递归函数怎么用才有效
2018/02/24 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
python操作日期和时间的方法
2014/03/11 Python
Python中实现字符串类型与字典类型相互转换的方法
2014/08/18 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
接口中的方法可以是abstract的吗
2015/07/23 面试题
九年级物理教学反思
2014/01/29 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
男方婚礼答谢词
2015/01/20 职场文书
闪闪的红星观后感
2015/06/08 职场文书