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 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
js 实现打印网页中定义的部分内容的代码
Apr 01 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
js实现在网页上简单显示时间的方法
Mar 02 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
Oct 22 Javascript
jquery+php实现滚动的数字特效
Nov 29 Javascript
详解使用React.memo()来优化函数组件的性能
Mar 19 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
Apr 11 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
Nov 10 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
js实现限定范围拖拽的示例
Oct 26 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 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 Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
浅谈php命令行用法
2015/02/04 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
2017/03/14 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
python 错误处理 assert详解
2020/04/20 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
只要五步 就可以用HTML5/CSS3快速制作便签贴特效(图)
2012/06/04 HTML / CSS
网络工程专业自荐信范文
2014/03/16 职场文书
素质教育标语
2014/06/27 职场文书
2016新年问候语大全
2015/11/11 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL