element合并表格行的方法實(shí)現(xiàn)
需求描述

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

