Vue原生table單元格合并:如何優雅地處理多余數據并實現正確合并?

vue原生table合并單元格及數據處理

在使用vue構建表格時,常常需要實現單元格合并的功能,尤其當數據存在關聯性,需要將多行數據合并到一個單元格中顯示時。然而,直接使用rowspan屬性合并單元格,可能會導致多余的數據顯示或錯位。本文將針對Vue原生table合并單元格,并處理多余數據的問題,提供一種解決方案。

問題描述:

假設我們有一個包含多個屬性的數據列表 data_list,其中 merge_number 屬性決定了需要合并的行數。例如,merge_number 為 2 表示需要將當前行及下一行的數據在item_attr_name和opr_date列合并。如果直接使用 rowspan 屬性,則會造成多余的數據顯示在表格中。

解決方法

立即學習前端免費學習筆記(深入)”;

核心思路在于預處理數據,標記哪些行需要顯示合并單元格,哪些行需要隱藏多余的單元格。我們可以通過遍歷數據列表,利用一個計數器 merge 來追蹤當前需要合并的行數。

具體實現:

首先,我們需要創建一個函數來預處理數據。這個函數會遍歷 data_list,根據 merge_number 屬性修改每個數據項的 merge_number 屬性。如果 merge_number 大于1,則表示需要合并,將后續需要隱藏的行數據的merge_number屬性設置為0;否則,保持原樣。

// 這里 data 就是題中給的數據 const data_list = ((data) => {   let merge = 0;   data.forEach(row => {     if (merge > 0) {       row.merge_number = 0     } else {       merge = row.merge_number -1; //此處修改,使merge=0時,剛好合并完。     }   });   return data; })(data);

接下來,在Vue模板中,根據預處理后的 merge_number 屬性來渲染表格。只有當 merge_number 大于 0 時,才渲染合并單元格的 td 元素,否則隱藏該單元格。

<template v-if="item.merge_number > 0">   <td :rowspan="item.merge_number + 1"> {{ item.item_attr_name }} </td>   <td :rowspan="item.merge_number + 1"> {{ item.opr_date }} </td> </template>

通過以上步驟,我們就能有效地處理Vue原生table合并單元格時出現的多余數據問題,實現單元格的正確合并和數據的清晰顯示。 需要注意的是,代碼中merge_number -1的修改是為了保證合并單元格的行數準確。 原先的邏輯會導致合并行數少一行。

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享