最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Vue框架下實(shí)現(xiàn)表格行合并的兩種方法

 更新時間:2026年04月03日 09:07:12   作者:鄒榮樂  
本文介紹了ElementUI和Antd+Vue中el-table和a-table實(shí)現(xiàn)行合并的方法,包括基本使用、實(shí)現(xiàn)步驟、示例代碼等,通過自定義計算合并行數(shù)的方法,可以靈活實(shí)現(xiàn)表格數(shù)據(jù)的合并顯示,提升數(shù)據(jù)的可讀性和用戶體驗(yàn),需要的朋友可以參考下

一、el-table 行合并

在前端開發(fā)中,數(shù)據(jù)展示一直是一個重要的部分,而表格則是數(shù)據(jù)展示最常見的形式之一。ElementUI 是餓了么前端團(tuán)隊(duì)推出的一款基于 Vue 的 UI 組件庫,其中的 el-table 組件是一個功能強(qiáng)大且靈活的表格組件。今天我們要詳細(xì)探討的是 el-table 的行列合并操作。

1、初識 el-table

el-table 是一個提供了豐富功能和極高定制性的表格組件。它不僅能展示常規(guī)的表格數(shù)據(jù),還可以實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)處理和展示需求,如排序、過濾、分頁、合并單元格等。而在實(shí)際開發(fā)中,行列合并是一個非常實(shí)用的功能,尤其是在展示報表數(shù)據(jù)時,能夠極大地提升數(shù)據(jù)的可讀性和用戶體驗(yàn)。

2、el-table 的基本使用

在開始討論行列合并之前,我們先簡單了解一下 el-table 的基本使用方法。我們可以通過 el-table 標(biāo)簽和 el-table-column 標(biāo)簽來定義一個表格。el-table 用于定義整個表格,而 el-table-column 用于定義表格中的每一列。

3、行合并的實(shí)現(xiàn)

行合并是指將相同數(shù)據(jù)的相鄰行合并成一個單元格,這在數(shù)據(jù)表格中非常常見。ElementUI 通過 span-method 屬性來實(shí)現(xiàn)行合并功能。span-method 是一個方法,用于設(shè)置單元格的 rowspan 和 colspan。該方法的返回值是一個包含 rowspan 和 colspan 的對象,通過它們可以控制單元格的合并。

4、實(shí)現(xiàn)步驟

  1. 定義表格數(shù)據(jù):獲取你的表格數(shù)據(jù),這些數(shù)據(jù)將用于渲染表格。
  2. 對數(shù)據(jù)進(jìn)行排序:如果接口返回數(shù)據(jù)已經(jīng)做了排序處理,這布可以忽略。
  3. 計算合并行數(shù):編寫一個方法來計算每一行需要合并的行數(shù)。這個方法會遍歷表格數(shù)據(jù),根據(jù)需要合并的列的值來判斷哪些行需要合并。
  4. 設(shè)置span-method:在el-table組件中設(shè)置span-method屬性,并傳入你編寫的計算合并行數(shù)的方法。

5、示例代碼

<template>
    <div class="about">
        <h2 style="margin-top: 10px;">element-plus 合并行示例</h2>
        <div style="margin-bottom: 10px;">
            在Vue中使用Element UI的el-table組件時,可以通過span-method屬性來合并表格中的單元格。
        </div>
        <el-table :data="tableData" :span-method="objectSpanMethod" border style="width: 100%">
            <el-table-column prop="name" label="Name" />
            <el-table-column prop="age" label="Age"  />
            <el-table-column prop="address" label="Address" />
        </el-table>
    </div>
</template>
<script setup>
import { ref, onMounted, reactive } from 'vue'
const spanArr = ref([])
const tableData = ref([
    { key: '1', name: 'Mike', age: 30, address: 'Chicago' },
    { key: '2', name: 'Alice', age: 22, address: 'Phoenix' },
    { key: '3', name: 'John', age: 25, address: 'New York' },
    { key: '4', name: 'Mike', age: 31, address: 'Houston' },
    { key: '5', name: 'John', age: 26, address: 'Los Angeles' },
    { key: '6', name: 'jack', age: 22, address: 'aPhoenix' },
])
// 排序方法
const sortData = () => {
    tableData.value.sort((a, b) => a.name.localeCompare(b.name))
    // 計算合并行數(shù)
    calculateSpanArr()
}
// 計算合并行數(shù)
const calculateSpanArr = () => {
    const tempArr = []
    let position = 0
    // 這里以姓名重復(fù)的數(shù)據(jù)進(jìn)行合并,實(shí)際應(yīng)用中可以根據(jù)需求調(diào)整合并規(guī)則
    tableData.value.forEach((item, index) => {
        if (index === 0) {
            tempArr.push(1)
            position = 0
        } else {
            if (item.name === tableData.value[index - 1].name) {
                tempArr[position] += 1
                tempArr.push(0)
            } else {
                tempArr.push(1)
                position = index
            }
        }
    })
    spanArr.value = tempArr
}
// 合并單元格方法
const objectSpanMethod = ({ columnIndex, rowIndex }) => {
    if (columnIndex === 0) {
        return {
            rowspan: spanArr.value[rowIndex],
            colspan: spanArr.value[rowIndex] > 0 ? 1 : 0
        }
    }
    return { rowspan: 1, colspan: 1 }
}
onMounted(() => {
    sortData() // 初始加載時自動排序
})
</script>

6、解釋

  • 表格數(shù)據(jù):tableData數(shù)組包含了需要展示的表格數(shù)據(jù)。
  • 計算合并行數(shù):calculateSpanArr方法遍歷tableData,根據(jù)name字段的值來計算每一行需要合并的行數(shù),并將結(jié)果存儲在spanArr數(shù)組中。
  • span-method:objectSpanMethod方法根據(jù)columnIndex來判斷是否需要合并單元格。如果columnIndex為0(即第一列),則返回spanArr數(shù)組中對應(yīng)的值;否則,返回[1, 1]表示正常顯示單元格。
  • 組件掛載:在mounted生命周期鉤子中調(diào)用calculateSpanArr方法來初始化spanArr數(shù)組。
  • 這樣,當(dāng)表格數(shù)據(jù)中的第一列有相同值時,這些值所在的單元格就會被合并。

7、運(yùn)行效果

二、a-table 行合并

antd+vue是我目前項(xiàng)目的主流,在工作過程中,經(jīng)常用到table組件。比如:當(dāng)有大量結(jié)構(gòu)化的數(shù)據(jù)需要展現(xiàn)時;當(dāng)需要對數(shù)據(jù)進(jìn)行排序、搜索、分頁、自定義操作等復(fù)雜行為時。

1、初識 a-table

A-Table 是 Ant Design 提供的一個功能強(qiáng)大的表格組件,用于展示結(jié)構(gòu)化數(shù)據(jù)并支持分頁、排序、篩選等功能。

2、a-table 的基本使用

A-Table 支持多種屬性來定制表格的行為和外觀。常見的屬性包括 columns(列定義)、dataSource(數(shù)據(jù)源)、pagination(分頁設(shè)置)等。

3、行合并的實(shí)現(xiàn)

使用customCell和customRender實(shí)現(xiàn)首列相同數(shù)據(jù)合并。

4、實(shí)現(xiàn)步驟

  1. 定義表格數(shù)據(jù):獲取你的表格數(shù)據(jù),這些數(shù)據(jù)將用于渲染表格。
  2. 對數(shù)據(jù)進(jìn)行排序:如果接口返回數(shù)據(jù)已經(jīng)做了排序處理,這布可以忽略。
  3. 計算合并行數(shù):編寫一個方法來計算每一行需要合并的行數(shù)。這個方法會遍歷表格數(shù)據(jù),根據(jù)需要合并的列的值來判斷哪些行需要合并。
  4. 設(shè)置span-method:在el-table組件中設(shè)置span-method屬性,并傳入你編寫的計算合并行數(shù)的方法。

5、示例代碼

<template>
    <div class="about">
        <h2 style="margin-top: 10px;">ant-design-vue 合并行示例</h2>
        <div style="margin-bottom: 10px;">
            以下是基于Ant Design Vue的表格合并實(shí)現(xiàn),使用customCell和customRender實(shí)現(xiàn)首列相同數(shù)據(jù)合并:
        </div>
        <a-table :dataSource="tableData" :columns="columns" bordered  />
    </div>
</template>
<script setup>
import { ref, onMounted, reactive } from 'vue'

const tableData = ref([
    { key: '1', name: 'Mike', age: 30, address: 'Chicago' },
    { key: '2', name: 'Alice', age: 22, address: 'Phoenix' },
    { key: '3', name: 'John', age: 25, address: 'New York' },
    { key: '4', name: 'Mike', age: 31, address: 'Houston' },
    { key: '5', name: 'John', age: 26, address: 'Los Angeles' },
    { key: '6', name: 'jack', age: 22, address: 'aPhoenix' },
])

// 轉(zhuǎn)換為 element-plus 合并行格式
const spanMap = ref({})

// 計算合并規(guī)則
const calculateSpans = () => {
    const tempMap = {}
    let position = 0
    // 這里以姓名重復(fù)的數(shù)據(jù)進(jìn)行合并,實(shí)際應(yīng)用中可以根據(jù)需求調(diào)整合并規(guī)則
    tableData.value.forEach((item, index) => {
        if (index === 0) {
            tempMap[index] = { span: 1 }
            position = 0
        } else {
            if (item.name === tableData.value[index - 1].name) {
                tempMap[position].span += 1
                tempMap[index] = { span: 0 }
            } else {
                tempMap[index] = { span: 1 }
                position = index
            }
        }
    })
    spanMap.value = tempMap
}

// 排序方法
const sortData = () => {
    tableData.value.sort((a, b) => a.name.localeCompare(b.name))
    // 重新計算合并規(guī)則
    calculateSpans()
}

// 列定義
const columns = [
    {
        title: 'Name',
        dataIndex: 'name',
        customCell: (_, index) => {
            return {
                rowSpan: spanMap.value[index]?.span || 0
            }
        }
    },
    {
        title: 'Age',
        dataIndex: 'age'
    },
    {
        title: 'Address',
        dataIndex: 'address'
    }
]

onMounted(() => {
    sortData() // 初始加載時自動排序
})
</script>

6、解釋

  • 合并機(jī)制:Ant Design使用customCell返回rowSpan實(shí)現(xiàn)合并,不同于Element Plus的span-method
  • 數(shù)據(jù)結(jié)構(gòu):必須包含key字段作為唯一標(biāo)識
  • API:列定義通過columns數(shù)組配置,合并邏輯寫在customCell中
  • 零值處理:被合并的行需要返回rowSpan: 0

7、運(yùn)行效果

以上就是在Vue框架下實(shí)現(xiàn)表格行合并的兩種方法的詳細(xì)內(nèi)容,更多關(guān)于Vue表格行合并的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue3+JS高級前端面試題及答案總結(jié)大全

    Vue3+JS高級前端面試題及答案總結(jié)大全

    這篇文章主要介紹了Vue3+JS高級前端面試題及答案總結(jié)的相關(guān)資料,在實(shí)際項(xiàng)目中,能運(yùn)用這些技能高效開發(fā)前端頁面,優(yōu)化用戶體驗(yàn),對Vue的生態(tài)系統(tǒng)也有一定了解,需要的朋友可以參考下
    2025-12-12
  • vue自定義js圖片碎片輪播圖切換效果的實(shí)現(xiàn)代碼

    vue自定義js圖片碎片輪播圖切換效果的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue自定義js圖片碎片輪播圖切換效果的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • Vue項(xiàng)目打包并部署nginx服務(wù)器的詳細(xì)步驟

    Vue項(xiàng)目打包并部署nginx服務(wù)器的詳細(xì)步驟

    vue項(xiàng)目開發(fā)好之后需要部署到服務(wù)器上進(jìn)行外網(wǎng)訪問,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包并部署nginx服務(wù)器的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • vue文本識別"\n"換行問題的解決方式

    vue文本識別"\n"換行問題的解決方式

    在頁面中經(jīng)常會遇到自定義文本,如果文本過長就需要換行,在HTML中可以通過標(biāo)簽換行,也可以通過\n轉(zhuǎn)椅字符換行,下面這篇文章主要給大家介紹了關(guān)于vue文本識別“\n”換行問題的解決方式,需要的朋友可以參考下
    2022-11-11
  • vue自定義表單生成器form-create使用詳解

    vue自定義表單生成器form-create使用詳解

    這篇文章主要介紹了vue自定義表單生成器,可根據(jù)json參數(shù)動態(tài)生成表單,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • vue3的ref、isRef、toRef、toRefs、toRaw詳細(xì)介紹

    vue3的ref、isRef、toRef、toRefs、toRaw詳細(xì)介紹

    本文詳細(xì)講解了vue3的ref、isRef、toRef、toRefs、toRaw,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • mpvue中配置vuex并持久化到本地Storage圖文教程解析

    mpvue中配置vuex并持久化到本地Storage圖文教程解析

    這篇文章主要介紹了mpvue中配置vuex并持久化到本地Storage的教程詳解,# 配置vuex和在vue中相同,只是mpvue有一個坑,就是不能直接在new Vue的時候傳入store。本文分步驟給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-03-03
  • 解決VMware中vmware-vmx.exe進(jìn)程無法關(guān)閉以及死機(jī)等問題

    解決VMware中vmware-vmx.exe進(jìn)程無法關(guān)閉以及死機(jī)等問題

    這篇文章主要介紹了解決VMware中vmware-vmx.exe進(jìn)程無法關(guān)閉以及死機(jī)等問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Vue3使用icon的兩種方式實(shí)例

    Vue3使用icon的兩種方式實(shí)例

    vue開發(fā)網(wǎng)站的時候,往往圖標(biāo)是起著很重要的作用,下面這篇文章主要給大家介紹了關(guān)于Vue3使用icon的兩種方式,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • vue如何實(shí)現(xiàn)角色權(quán)限的控制

    vue如何實(shí)現(xiàn)角色權(quán)限的控制

    關(guān)于角色與權(quán)限控制,通常是分為兩大類,一種是菜單權(quán)限,一種是操作權(quán)限,本文將深入探討如何通過?Vue?實(shí)現(xiàn)角色權(quán)限控制,特別是基于按鈕級別的權(quán)限控制,需要的可以了解下
    2025-02-02

最新評論

虹口区| 五河县| 宜宾县| 广德县| 平江县| 平南县| 洪洞县| 绥棱县| 页游| 柯坪县| 玛多县| 历史| 苗栗市| 房产| 巴青县| 柘城县| 双鸭山市| 苏尼特右旗| 龙江县| 泰和县| 金平| 延长县| 原阳县| 教育| 日喀则市| 石家庄市| 通道| 汨罗市| 定州市| 宜章县| 静海县| 日喀则市| 平乡县| 平江县| 隆子县| 阿拉善右旗| 灌南县| 黄梅县| 卢湾区| 桐城市| 长葛市|