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+css在交互上的应用
Jul 18 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
javascript模拟地球旋转效果代码实例
Dec 02 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
JS运算符优先级与表达式示例详解
Sep 04 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
vue项目中使用tinymce编辑器的步骤详解
2018/09/11 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
python中日期和时间格式化输出的方法小结
2015/03/19 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
python设计模式大全
2016/06/27 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
python如何实现视频转代码视频
2019/06/17 Python
python实现斗地主分牌洗牌
2020/06/22 Python
快速了解Python开发环境Spyder
2020/06/29 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
韩国11街:11STREET
2018/03/27 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
公民代理授权委托书
2014/09/24 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2015年仓库工作总结
2015/04/09 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
python周期任务调度工具Schedule使用详解
2021/11/23 Python
python文件与路径操作神器 pathlib
2022/04/01 Python