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