element合并表格行的方法實現(xiàn)
需求描述
動態(tài)獲取數(shù)據(jù)后,將ID相同的行,ID合并成一個。
官方方法
//rowIndex當(dāng)前行號 columnIndex當(dāng)前列號 由此可知道每一行渲染時都會調(diào)用當(dāng)前方法,只不過在渲染過程中設(shè)置了它合并的行數(shù)和列數(shù),從而得到不同的效果。 arraySpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { //用于設(shè)置要合并的列 if (rowIndex % 2 === 0) { //用于設(shè)置合并開始的行號 return { rowspan: 2, //合并的行數(shù) colspan: 1 //合并的列數(shù),設(shè)為0則直接不顯示 }; } else { return { rowspan: 0, colspan: 0 }; } } }
數(shù)據(jù)處理
由于element一行一行渲染,在渲染的時候調(diào)用合并函數(shù),所以數(shù)據(jù)最好以一行一行的格式準(zhǔn)備。
//table是一個數(shù)組,表示全部的數(shù)據(jù) const table = [{ },{//每一個元素是一個對象,表示一行 },{ }]
假設(shè)后臺傳過來的數(shù)據(jù)是以下的格式,就需要對數(shù)據(jù)進(jìn)行。
const table = { "123": [ { "name": "張三", "number": "123", }, { "name": "張三", "number": "1234", } ], "1234": [ { "name": "王五", "number": "213" }, ] } //映射方法 function mapper(): Array<validationResults> { const info: Array<validationResults> = []; for (const [id, personInfo] of Object.entries(table)) { personInfo.forEach((person) => { info.push({ id, name: person.name, number: person.number, }); }); } return errorInfo; }
行號合并
首先需要明確的是哪些行的第一列需要合并?id
相同的列需要合并(這里的數(shù)據(jù)是有序的,id相同的挨在一起)需要合并幾列呢?element-ui提供的方法直接返回的是合并的行和列,所以我們需要一個方法來計算合并的行。
生成一個與行數(shù)相同的數(shù)組記錄每一行設(shè)置的合并數(shù)
const mergerow = []; //獲取需要合并的行號 function getMergeRow(data) { let pos;//記錄需要合并的第一行坐標(biāo) for (let i = 0; i < data.length; i++) { if (i === 0) { mergerow.push(1); pos = 0 } else { // 判斷當(dāng)前元素與上一個元素是否相同 if (data[i].id=== data[i - 1].id) {//如果相同表示當(dāng)前行需要合并 mergerow[pos] += 1; //合并的行數(shù)+1 mergerow.push(0); //相同的被合并 } else {//id不同說明,是下一個需要合并的第一行 mergerow.push(1); pos = i; } } } }; //element-ui提供的方法 function cellMerge({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { const _row = mergerow[rowIndex]; const _col = _row > 0 ? 1 : 0; return { rowspan: _row, colspan: _col } } },
最后的數(shù)據(jù)表格
<template> <div> <el-table border :data="tableData" style="width: 100%;max-height: 160px;overflow: auto" :span-method="cellMerge"> <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="number" sortable label="數(shù)值 1"> </el-table-column> </el-table>
到此這篇關(guān)于element合并表格行的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)element合并表格行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element table跨分頁多選及回顯的實現(xiàn)示例
本文主要介紹了element table跨分頁多選及回顯的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02解決Vue項目Network:?unavailable的問題
項目只能通過Local訪問而不能通過Network訪問,本文主要介紹了解決Vue項目Network:?unavailable的問題,具有一定的參考價值,感興趣的可以了解一下2024-06-06淺談在Vue.js中如何實現(xiàn)時間轉(zhuǎn)換指令
這篇文章主要介紹了淺談在Vue.js中如何實現(xiàn)時間轉(zhuǎn)換指令,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01vue2.0實現(xiàn)移動端的輸入框?qū)崟r檢索更新列表功能
最近小編在做vue2.0的項目,遇到移動端實時檢索搜索更新列表的效果,下面腳本之家小編給大家?guī)砹藇ue2.0 移動端的輸入框?qū)崟r檢索更新列表功能的實例代碼,感興趣的朋友參考下吧2018-05-05解決Vue2.0 watch對象屬性變化監(jiān)聽不到的問題
今天小編就為大家分享一篇解決Vue2.0 watch對象屬性變化監(jiān)聽不到的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue使用jsonp抓取qq音樂數(shù)據(jù)的方法
這篇文章主要介紹了vue使用jsonp抓取qq音樂數(shù)據(jù)的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06