vxe-grid與vxe-table實(shí)現(xiàn)表格尾部合并方式
在日常開發(fā)中,我們經(jīng)常需要對表格的尾部進(jìn)行個(gè)性化處理,例如對總計(jì)進(jìn)行計(jì)算顯示在表尾中等合并某些單元格以突出關(guān)鍵信息。
本文將以 vxe-table 和 vxe-grid 組件為例,詳細(xì)介紹如何在 Vue 項(xiàng)目中實(shí)現(xiàn)表格尾部的動(dòng)態(tài)合并功能。
使用 vxe-grid 實(shí)現(xiàn)尾部合并
核心配置項(xiàng)
- border:控制表格邊框顯示
- height:設(shè)置表格高度
- columns:配置列定義
- data:綁定表格主體數(shù)據(jù)
- showFooter:控制底部行(footer)顯示
- footerData:綁定表格尾部數(shù)據(jù)
- mergeFooterItems:定義底部單元格合并規(guī)則
代碼示例
<template>
<vxe-grid
border
:columns="columns"
:data="tableData"
show-footer
:footer-data="footerData"
:merge-footer-items="mergeFooterItems"
/>
</template>
<script setup>
import { ref } from 'vue'
/**
* 定義尾部單元格合并規(guī)則
* 格式:{ row, col, rowspan, colspan }
* - row: 尾部行索引(從 0 開始)
* - col: 尾部列索引(從 0 開始)
* - rowspan: 縱向合并的單元格數(shù)量
* - colspan: 橫向合并的單元格數(shù)量
*/
const mergeFooterItems = ref([
{ row: 0, col: 0, rowspan: 1, colspan: 2 } // 合并第1行的前兩列
])
/**
* 定義表格尾部數(shù)據(jù)
* 每一項(xiàng)對應(yīng)尾部的一行數(shù)據(jù)
* 字段需與 columns 中定義的 field 保持一致
*/
const footerData = ref([
{ name: '總計(jì)', amount: '—', count: '100' } // 尾部顯示“總計(jì)”信息
])
const columns = ref([
//footerAlign: "right"---表格顯示位置
{ field: 'name', title: '名稱' ,footerAlign: "right"},
{ field: 'amount', title: '金額' },
{ field: 'count', title: '數(shù)量' }
])
const tableData = ref([
{ name: '商品A', amount: 100, count: 50 },
{ name: '商品B', amount: 200, count: 30 }
])
</script>動(dòng)態(tài)切換合并方式
// 初始合并配置(合并前兩列)
gridOptions.mergeFooterItems = [
{ row: 0, col: 0, rowspan: 1, colspan: 2 }
]
// 切換為合并后兩列
function changeMerge() {
gridOptions.mergeFooterItems = [
{ row: 0, col: 1, rowspan: 1, colspan: 2 }
]
}
- 必須設(shè)置
showFooter: true顯示表尾 - 需通過
footerData提供尾部數(shù)據(jù) - 修改
mergeFooterItems后會(huì)自動(dòng)觸發(fā)表格重繪
重點(diǎn):footerAlign: "right"---表格顯示位置
官方文檔:Vxe Table v4 https://vxetable.cn/v4/#/component/grid/merge/footer
使用 vxe-table 實(shí)現(xiàn)尾部合并
核心配置差異
- 需手動(dòng)通過
<vxe-column>渲染列 - 合并配置通過
:merge-footer-items屬性傳遞
代碼示例
<template>
<vxe-table
border
show-footer
:data="tableData"
:footer-data="footerData"
:merge-footer-items="mergeFooterItems"
>
<vxe-column field="name" title="名稱" />
<vxe-column field="amount" title="金額" />
<vxe-column field="count" title="數(shù)量" />
</vxe-table>
</template>
<script setup>
import { ref } from 'vue'
const mergeFooterItems = ref([
{ row: 0, col: 0, rowspan: 1, colspan: 2 }
])
//顯示在那個(gè)列就寫對應(yīng)列的field---name顯示在名稱列
const footerData = ref([
{ name: '總計(jì)', amount: '—', count: '100' }
])
const tableData = ref([
{ name: '商品A', amount: 100, count: 50 },
{ name: '商品B', amount: 200, count: 30 }
])
</script>
動(dòng)態(tài)切換合并方式
const setMergeMode = (mode) => {
mergeFooterItems.value = mode === 1
? [{ row: 0, col: 0, colspan: 2 }]
: [{ row: 0, col: 1, colspan: 2 }]
}
關(guān)鍵點(diǎn)
- 需要同時(shí)設(shè)置
show-footer屬性 - 合并規(guī)則變更時(shí)會(huì)自動(dòng)響應(yīng)更新
- 支持多行尾部數(shù)據(jù)的復(fù)雜合并
官方文檔:Vxe Table v4 https://vxetable.cn/v4/#/component/table/merge/footer
兩種方式對比總結(jié)
| 特性 | vxe-grid | vxe-table |
|---|---|---|
| 配置方式 | 集中式配置對象 | 分散式屬性綁定 |
| 適合場景 | 復(fù)雜表格場景 | 簡單表格或需要更高自由度時(shí) |
| 動(dòng)態(tài)更新 | 修改配置對象的屬性 | 直接更新響應(yīng)式數(shù)據(jù) |
| 代碼量 | 相對較少 | 相對較多 |
1. 動(dòng)態(tài)列定義
- 通過 columns 數(shù)組動(dòng)態(tài)定義列結(jié)構(gòu)
- 支持靈活調(diào)整列配置(字段名、標(biāo)題、寬度等)
2. 尾部合并配置
- 通過 mergeFooterItems 數(shù)組控制合并規(guī)則
關(guān)鍵參數(shù):
- row:起始行索引
- col:起始列索引
- rowspan:縱向合并行數(shù)
- colspan:橫向合并列數(shù)
3. 數(shù)據(jù)綁定
- footerData 綁定底部顯示數(shù)據(jù)
- 數(shù)據(jù)結(jié)構(gòu)需與列定義的 field 對應(yīng)
4. 動(dòng)態(tài)更新機(jī)制
- 使用響應(yīng)式變量(ref/reactive)
- 修改配置自動(dòng)觸發(fā)界面更新
關(guān)鍵注意事項(xiàng)
- 合并范圍不能超出表格實(shí)際列數(shù)
- 合并后單元格內(nèi)容取自第一個(gè)指定單元格的值
- 需配合 footerData 使用才能顯示尾部內(nèi)容
- 多行尾部合并需確保規(guī)則不沖突
- 動(dòng)態(tài)列場景需同步更新列索引
性能優(yōu)化建議
- 大數(shù)據(jù)量時(shí)避免頻繁更新合并規(guī)則
- 固定列寬提升渲染性能
- 復(fù)雜合并預(yù)先計(jì)算規(guī)則對象
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue-cli3 配置開發(fā)與測試環(huán)境詳解
這篇文章主要介紹了vue-cli3 配置開發(fā)與測試環(huán)境詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
Vue兩種組件類型:遞歸組件和動(dòng)態(tài)組件的用法
這篇文章主要介紹了Vue兩種組件類型:遞歸組件和動(dòng)態(tài)組件的用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue3使用keep?alive實(shí)現(xiàn)前進(jìn)更新后退銷毀
這篇文章主要為大家介紹了vue3中使用keep?alive實(shí)現(xiàn)前進(jìn)更新后退銷毀示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
如何用vite動(dòng)態(tài)導(dǎo)入vue的路由配置詳解
這篇文章主要介紹了如何用vite動(dòng)態(tài)導(dǎo)入vue的路由配置的相關(guān)資料,動(dòng)態(tài)導(dǎo)入路由模仿了uniapp的頁面配置文件結(jié)構(gòu),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04
nuxt.js添加環(huán)境變量,區(qū)分項(xiàng)目打包環(huán)境操作
這篇文章主要介紹了nuxt.js添加環(huán)境變量,區(qū)分項(xiàng)目打包環(huán)境操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

