论表格的话写过很多,不过之前写的都是简单的表格,也从来不用什么ui库,纯原生开发,因内心坚信VUE的发展React的跨度又跳槽到一家VUE的公司,我们组主要做公司的内部管理系统,所以会涉及到很多表格,Element这个表格真的是....
话不多说,直接上正文:
关于element表格合并的问题,本文介绍关于列的合并,其实只要缕清思路没啥特别困难的,先简单的介绍一下思路。
后台给的数据大部分是不能直接用的,除非你和后台有非常好的关系,当然一己之私我相信别人也不会按你的格式写的,首先像这种合并列的一有一级两级三级(你可以理解为一个List两个List...),不管他有几个集合,都给他遍历出来,因为你想用element只能遍历,其实就是重中之重,一般每一条数据都会附带一个id,而id是唯一的,但是没有id的情况下怎么办,其实很简单,循环外定义一个变量,哪层合并在哪层++(如果有重复的id也可以采取这种办法,因为有时候后台的话不能信,听听就行),例如:
我讲的都是大白话,相信各位都可以听得懂,这个变量是我要合并那层的处理。
接下来的逻辑就是将刚刚遍历完的集合继续循环,找不同,如果是相同的就给他合并了,
mergeComon(id,rowIndex){ var idName=this.tableData[rowIndex][id]; if(rowIndex>0){ if(this.tableData[rowIndex][id] != this.tableData[rowIndex-1][id]){ var i = rowIndex,num = 0; while(i<this.tableData.length){ if(this.tableData[i][id] === idName){ i++; num++; }else{ i=this.tableData.length } } return { rowspan:num, colspan:1 } }else{ return{ rowspan:0, colspan:1 } } }else{ var i = rowIndex,num = 0; while(i<this.tableData.length){ if(this.tableData[i][id] === idName){ i++; num++; }else{ i=this.tableData.length } } return { rowspan:num, colspan:1 } } } }
以上函数是公共的,只要你会copy,可以拿去直接用,其实还可以深度优化。
参数介绍:
id:就是刚刚找的那个相同的或者不同的即将要合并的那个id。
rowIndex:看下文。
紧接着就是element表格合并的函数了,
objectSpanMethod({ row, column, rowIndex, columnIndex }){ switch(columnIndex){ case 0: return this.mergeComon('rsId',rowIndex); case 1: return this.mergeComon('eiId',rowIndex); break; case 2: return this.mergeComon('screen',rowIndex); } },
我给他稍微做了下处理,因为合并的单元格比较多,所以...(rowIndex看此处)。
大工告成。
其实看不懂也没关系,这儿的思路我也是屡了好久,确实挺乱的,用一次看一次,索性给他封装出来,日后直接调用就行。
作为在读的你只需要(copy/copy/copy)
依旧老样子,不喜勿喷,写给需要的人看。