element合并表格行的方法實(shí)現(xiàn)
需求描述
動(dòng)態(tài)獲取數(shù)據(jù)后,將ID相同的行,ID合并成一個(gè)。
官方方法
//rowIndex當(dāng)前行號(hào) columnIndex當(dāng)前列號(hào) 由此可知道每一行渲染時(shí)都會(huì)調(diào)用當(dāng)前方法,只不過(guò)在渲染過(guò)程中設(shè)置了它合并的行數(shù)和列數(shù),從而得到不同的效果。 arraySpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { //用于設(shè)置要合并的列 if (rowIndex % 2 === 0) { //用于設(shè)置合并開始的行號(hào) return { rowspan: 2, //合并的行數(shù) colspan: 1 //合并的列數(shù),設(shè)為0則直接不顯示 }; } else { return { rowspan: 0, colspan: 0 }; } } }
數(shù)據(jù)處理
由于element一行一行渲染,在渲染的時(shí)候調(diào)用合并函數(shù),所以數(shù)據(jù)最好以一行一行的格式準(zhǔn)備。
//table是一個(gè)數(shù)組,表示全部的數(shù)據(jù) const table = [{ },{//每一個(gè)元素是一個(gè)對(duì)象,表示一行 },{ }]
假設(shè)后臺(tái)傳過(guò)來(lái)的數(shù)據(jù)是以下的格式,就需要對(duì)數(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; }
行號(hào)合并
首先需要明確的是哪些行的第一列需要合并?id
相同的列需要合并(這里的數(shù)據(jù)是有序的,id相同的挨在一起)需要合并幾列呢?element-ui提供的方法直接返回的是合并的行和列,所以我們需要一個(gè)方法來(lái)計(jì)算合并的行。
生成一個(gè)與行數(shù)相同的數(shù)組記錄每一行設(shè)置的合并數(shù)
const mergerow = []; //獲取需要合并的行號(hào) 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)前元素與上一個(gè)元素是否相同 if (data[i].id=== data[i - 1].id) {//如果相同表示當(dāng)前行需要合并 mergerow[pos] += 1; //合并的行數(shù)+1 mergerow.push(0); //相同的被合并 } else {//id不同說(shuō)明,是下一個(gè)需要合并的第一行 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合并表格行的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)element合并表格行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue實(shí)現(xiàn)用戶登錄及token驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)用戶登錄及token驗(yàn)證,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08element table跨分頁(yè)多選及回顯的實(shí)現(xiàn)示例
本文主要介紹了element table跨分頁(yè)多選及回顯的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02解決Vue項(xiàng)目Network:?unavailable的問(wèn)題
項(xiàng)目只能通過(guò)Local訪問(wèn)而不能通過(guò)Network訪問(wèn),本文主要介紹了解決Vue項(xiàng)目Network:?unavailable的問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06淺談在Vue.js中如何實(shí)現(xiàn)時(shí)間轉(zhuǎn)換指令
這篇文章主要介紹了淺談在Vue.js中如何實(shí)現(xiàn)時(shí)間轉(zhuǎn)換指令,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01vue 實(shí)現(xiàn) rem 布局或vw 布局的方法
這篇文章主要介紹了vue 實(shí)現(xiàn) rem 布局的 或者 vw 布局的方法,本文給提供多種方法,需要的朋友可以參考下2019-11-11vue2.0實(shí)現(xiàn)移動(dòng)端的輸入框?qū)崟r(shí)檢索更新列表功能
最近小編在做vue2.0的項(xiàng)目,遇到移動(dòng)端實(shí)時(shí)檢索搜索更新列表的效果,下面腳本之家小編給大家?guī)?lái)了vue2.0 移動(dòng)端的輸入框?qū)崟r(shí)檢索更新列表功能的實(shí)例代碼,感興趣的朋友參考下吧2018-05-05解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽不到的問(wèn)題
今天小編就為大家分享一篇解決Vue2.0 watch對(duì)象屬性變化監(jiān)聽不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue使用jsonp抓取qq音樂數(shù)據(jù)的方法
這篇文章主要介紹了vue使用jsonp抓取qq音樂數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06