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开发随笔二 动态加载js和文件
Nov 25 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
Jan 27 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
java必学必会之static关键字
Dec 03 Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
Vue表单输入绑定的示例代码
Nov 01 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 Javascript
在博客园博文中添加自定义右键菜单的方法详解
Feb 05 Javascript
JavaScript日期库date-fn.js使用方法解析
Sep 09 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 minixml详解
2008/07/19 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
javascript验证身份证号
2015/03/03 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
require.js的用法详解
2015/10/20 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
jQuery中用on绑定事件时需注意的事项
2017/03/19 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
tensorflow 模型权重导出实例
2020/01/24 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
Sixt美国租车:高端豪华车型自驾体验
2017/09/02 全球购物
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
C# Debug和Testing相关面试题
2015/10/25 面试题
个人整改措施落实情况汇报
2014/10/29 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
工作失误检讨书
2015/01/26 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL