溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何實(shí)現(xiàn)element-ui table span-method行合并

發(fā)布時(shí)間:2021-08-02 12:27:49 來(lái)源:億速云 閱讀:207 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹如何實(shí)現(xiàn)element-ui table span-method行合并,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

element-ui官網(wǎng)中關(guān)于行合并的例子是根據(jù)行號(hào)進(jìn)行合并的,這顯然不符合我們?nèi)粘i_(kāi)發(fā)需求,因?yàn)橥ǔN覀僼able中的數(shù)據(jù)都是動(dòng)態(tài)生成的,所以需要做一些修改。我們首先解讀一下官網(wǎng)實(shí)例中的各參數(shù)的意義:

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) {  //用于設(shè)置要合并的列
     if (rowIndex % 2 === 0) {  //用于設(shè)置合并開(kāi)始的行號(hào)
      return {
       rowspan: 2,     //合并的行數(shù)
       colspan: 1     //合并的列數(shù),設(shè)為0則直接不顯示
      };
     } else {
      return {
       rowspan: 0,
       colspan: 0
      };
     }
    }
   }

研究這個(gè)例子后不難發(fā)現(xiàn),實(shí)現(xiàn)合并行的方法其實(shí)在每一行數(shù)據(jù)渲染的時(shí)候都會(huì)執(zhí)行,只不過(guò)在渲染過(guò)程中我們?cè)O(shè)置了它合并的行數(shù)和列數(shù),以得到不同的效果。所以我們需要生成一個(gè)與行數(shù)相同的數(shù)組記錄每一行設(shè)置的合并數(shù)。處理過(guò)程如下:

getSpanArr(data) { 
 for (var i = 0; i < data.length; i++) {
    if (i === 0) {
       this.spanArr.push(1);
       this.pos = 0
    } else {
     // 判斷當(dāng)前元素與上一個(gè)元素是否相同
  if (data[i].name === data[i - 1].name) {
        this.spanArr[this.pos] += 1;
        this.spanArr.push(0);
       } else {
        this.spanArr.push(1);
        this.pos = i;
       }
    }
  }
},

data就是我們從后臺(tái)拿到的數(shù)據(jù),通常是一個(gè)數(shù)組;spanArr是一個(gè)空的數(shù)組,用于存放每一行記錄的合并數(shù);pos是spanArr的索引。上述代碼意思是:如果是第一條記錄(索引為0),向數(shù)組中加入1,并設(shè)置索引位置;如果不是第一條記錄,則判斷它與前一條記錄是否相等,如果相等,則向spanArr中添入元素0,并將前一位元素+1,表示合并行數(shù)+1,以此往復(fù),得到所有行的合并數(shù),0即表示該行不顯示。

cellMerge({ row, column, rowIndex, columnIndex }) {
   if (columnIndex === 0) {
      const _row = this.spanArr[rowIndex];
      const _col = _row > 0 ? 1 : 0;
      return {
         rowspan: _row,
         colspan: _col
      }
   }
},

然后根據(jù)得到的數(shù)組spanArr對(duì)表格進(jìn)行合并渲染,并綁定合并方法

<el-table
   border
   :data="tableData"
   
   :span-method="cellMerge">
  ......
</el-table>

效果圖如下:

如何實(shí)現(xiàn)element-ui table span-method行合并

注:后臺(tái)獲取數(shù)據(jù)的時(shí)候根據(jù)要在前臺(tái)進(jìn)行合并的字段進(jìn)行排序,使要合并的字段值相同的記錄依次相鄰。

合并多行的情況

arraySpanMethod ({ row, column, rowIndex, columnIndex }) {
   if (rowIndex === 1) {
    // 合并第二行
    if (columnIndex === 1) {
     // 從第二列開(kāi)始
     return [2, 3]
     // 這里返回的是行和列的合并數(shù)量,可以返回一個(gè)數(shù)組,也可以返回一個(gè)對(duì)象,效果一樣
     // 這里rowspan為2是行有兩行合并,colspan為3是列有3列合并,你要合并幾行幾列就寫(xiě)上相應(yīng)的數(shù)字

     // 這個(gè)判斷是把第一行的第3列,第4列的值省略,在合并的表格右邊直接填原先第5列的值,合并了幾列,就省略幾列的值
    } else if (columnIndex === 2 || columnIndex === 3) {
     return [0, 0]
    }
   } else if (rowIndex === 2 && (columnIndex === 1 || columnIndex === 2 || columnIndex === 3)) {
    // 第二行的第2個(gè)數(shù),第3個(gè)數(shù),第4個(gè)數(shù)都要省略
    return [0, 0]
   }
  }

以上是“如何實(shí)現(xiàn)element-ui table span-method行合并”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI