element-ui 1.0的时候没有表格合并的方法,这当时作表格合并的功能时候,很是头疼。2.0开始官方已经支持表格合并的方法,那怎么作到表格动态合并呢,仍是直接看代码吧。element-ui
经过给table传入span-method方法能够实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、当前列号columnIndex四个属性。该函数能够返回一个包含两个元素的数组,第一个元素表明rowspan,第二个元素表明colspan。 也能够返回一个键名为rowspan和colspan的对象。数组
<template> <div> <el-table :data="tableData6" :span-method="objectSpanMethod" border style="width: 100%; margin-top: 20px"> <el-table-column prop="id" label="ID" width="180"> </el-table-column> <el-table-column prop="name" label="姓名"> </el-table-column> <el-table-column prop="amount1" label="数值 1(元)"> </el-table-column> <el-table-column prop="amount2" label="数值 2(元)"> </el-table-column> <el-table-column prop="amount3" label="数值 3(元)"> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableData6: [{ id: '12987122', name: '王小虎', amount1: '234', amount2: '3.2', amount3: 10 }, { id: '12987123', name: '王小虎', amount1: '165', amount2: '4.43', amount3: 12 }, { id: '12987124', name: '王小虎', amount1: '324', amount2: '1.9', amount3: 9 }, { id: '12987125', name: '王小虎', amount1: '621', amount2: '2.2', amount3: 17 }, { id: '12987126', name: '王小虎', amount1: '539', amount2: '4.1', amount3: 15 }] }; }, methods: { objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex % 2 === 0) { return { rowspan: 2, colspan: 1 }; } else { return { rowspan: 0, colspan: 0 }; } } } } }; </script>
https://jsfiddle.net/ve4sy51x/1/函数
https://jsfiddle.net/ve4sy51x...
经过一层一层往下找,ui
objectSpanMethod({ row, column, rowIndex, columnIndex }) { if(cacheData.length<=0){ return false } let colNum = cacheData[rowIndex][columnIndex]; if (colNum < 2) { return { rowspan: colNum, colspan: colNum } } else { return { rowspan: colNum, colspan: 1 } } }, combine(){ this.tableData.forEach((res,i)=> { cacheData[i] = []; colData.forEach((item, j) => { if (i === 0) { cacheData[0][j] = 1; cache = JSON.parse(JSON.stringify(res)); cacheIndex[j] = 0; } else { if(res[item.prop] === cache[item.prop] && item.prop !=='index'){ cacheData[cacheIndex[j]][j]++; cacheData[i][j] = 0 }else{ cache[item.prop] = res[item.prop]; cacheIndex[j] = i; cacheData[i][j] = 1; } } }) }) }
预处理生成一个二维数组,而后在放在objectSpanMethod方法里面。this