vxe-grid与vxe-table实现表格尾部合并方式

 更新时间:2026年02月09日 10:30:10   作者:pity_fan  
本文介绍了如何在Vue项目中使用vxe-table和vxe-grid组件实现表格尾部的动态合并功能,包括如何配置和使用`mergeFooterItems`属性来定义底部单元格合并规则,并提供了示例代码,同时,对比了两种组件在尾部合并配置方面的差异,总结了各自的优势和适用场景

在日常开发中,我们经常需要对表格的尾部进行个性化处理,例如对总计进行计算显示在表尾中等合并某些单元格以突出关键信息。

本文将以 vxe-table 和 vxe-grid 组件为例,详细介绍如何在 Vue 项目中实现表格尾部的动态合并功能。

使用 vxe-grid 实现尾部合并

核心配置项

  • border:控制表格边框显示
  • height:设置表格高度
  • columns:配置列定义
  • data:绑定表格主体数据
  • showFooter:控制底部行(footer)显示
  • footerData:绑定表格尾部数据
  • mergeFooterItems:定义底部单元格合并规则

代码示例

<template>
  <vxe-grid
    border 
    :columns="columns"     
    :data="tableData"        
    show-footer       
    :footer-data="footerData" 
    :merge-footer-items="mergeFooterItems" 
  />
</template>

<script setup>
import { ref } from 'vue'

/**
 * 定义尾部单元格合并规则
 * 格式:{ row, col, rowspan, colspan }
 * - row: 尾部行索引(从 0 开始)
 * - col: 尾部列索引(从 0 开始)
 * - rowspan: 纵向合并的单元格数量
 * - colspan: 横向合并的单元格数量
 */
const mergeFooterItems = ref([
  { row: 0, col: 0, rowspan: 1, colspan: 2 } // 合并第1行的前两列
])

/**
 * 定义表格尾部数据
 * 每一项对应尾部的一行数据
 * 字段需与 columns 中定义的 field 保持一致
 */
const footerData = ref([
  { name: '总计', amount: '—', count: '100' } // 尾部显示“总计”信息
])


const columns = ref([
  //footerAlign: "right"---表格显示位置
  { field: 'name', title: '名称' ,footerAlign: "right"},
  { field: 'amount', title: '金额' },
  { field: 'count', title: '数量' }  
])


const tableData = ref([
  { name: '商品A', amount: 100, count: 50 }, 
  { name: '商品B', amount: 200, count: 30 } 
])
</script>

动态切换合并方式

// 初始合并配置(合并前两列)
gridOptions.mergeFooterItems = [
  { row: 0, col: 0, rowspan: 1, colspan: 2 }
]

// 切换为合并后两列
function changeMerge() {
  gridOptions.mergeFooterItems = [
    { row: 0, col: 1, rowspan: 1, colspan: 2 }
  ]
}
 
  • 必须设置 showFooter: true 显示表尾
  • 需通过 footerData 提供尾部数据
  • 修改 mergeFooterItems 后会自动触发表格重绘

 重点:footerAlign: "right"---表格显示位置

官方文档:Vxe Table v4 https://vxetable.cn/v4/#/component/grid/merge/footer

使用 vxe-table 实现尾部合并

核心配置差异

  • 需手动通过 <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="数量" />
  </vxe-table>
</template>

<script setup>
import { ref } from 'vue'

const mergeFooterItems = ref([
  { row: 0, col: 0, rowspan: 1, colspan: 2 }
])

//显示在那个列就写对应列的field---name显示在名称列
const footerData = ref([
  { name: '总计', amount: '—', count: '100' }
])

const tableData = ref([
  { name: '商品A', amount: 100, count: 50 },
  { name: '商品B', amount: 200, count: 30 }
])
</script>

动态切换合并方式

const setMergeMode = (mode) => {
  mergeFooterItems.value = mode === 1 
    ? [{ row: 0, col: 0, colspan: 2 }] 
    : [{ row: 0, col: 1, colspan: 2 }]
}

关键点

  • 需要同时设置 show-footer 属性
  • 合并规则变更时会自动响应更新
  • 支持多行尾部数据的复杂合并

官方文档:Vxe Table v4 https://vxetable.cn/v4/#/component/table/merge/footer

两种方式对比总结

特性vxe-gridvxe-table
配置方式集中式配置对象分散式属性绑定
适合场景复杂表格场景简单表格或需要更高自由度时
动态更新修改配置对象的属性直接更新响应式数据
代码量相对较少相对较多

1. 动态列定义

  • 通过 columns 数组动态定义列结构
  • 支持灵活调整列配置(字段名、标题、宽度等)

2. 尾部合并配置

  • 通过 mergeFooterItems 数组控制合并规则

关键参数:

  • row:起始行索引
  • col:起始列索引
  • rowspan:纵向合并行数
  • colspan:横向合并列数

3. 数据绑定

  • footerData 绑定底部显示数据
  • 数据结构需与列定义的 field 对应

4. 动态更新机制

  • 使用响应式变量(ref/reactive)
  • 修改配置自动触发界面更新

关键注意事项

  • 合并范围不能超出表格实际列数
  • 合并后单元格内容取自第一个指定单元格的值
  • 需配合 footerData 使用才能显示尾部内容
  • 多行尾部合并需确保规则不冲突
  • 动态列场景需同步更新列索引

性能优化建议

  • 大数据量时避免频繁更新合并规则
  • 固定列宽提升渲染性能
  • 复杂合并预先计算规则对象

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中使用echarts的方法实例详解

    vue中使用echarts的方法实例详解

    这篇文章主要介绍了vue中使用echarts的方法,结合实例形式详细分析了vue中使用echarts的包安装、引入、生命周期函数元素挂载等相关操作技巧与使用注意事项,需要的朋友可以参考下
    2023-05-05
  • vue中父组件控制子组件的显示隐藏详解

    vue中父组件控制子组件的显示隐藏详解

    文章介绍了在Vue.js中实现父子组件之间通信的一种方法,通过在子组件内部定义一个`show`方法,并在父组件调用该方法时传入相应的参数来控制子组件的显示和隐藏,这种方法避免了使用props和emit,使子组件的显示逻辑更加独立和清晰
    2025-10-10
  • vue-cli3 配置开发与测试环境详解

    vue-cli3 配置开发与测试环境详解

    这篇文章主要介绍了vue-cli3 配置开发与测试环境详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 利用Nuxt.js做Vuex数据持久化

    利用Nuxt.js做Vuex数据持久化

    这篇文章主要介绍了利用Nuxt.js做Vuex数据持久化问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • Vue两种组件类型:递归组件和动态组件的用法

    Vue两种组件类型:递归组件和动态组件的用法

    这篇文章主要介绍了Vue两种组件类型:递归组件和动态组件的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 基于element-ui封装表单金额输入框的方法示例

    基于element-ui封装表单金额输入框的方法示例

    这篇文章主要介绍了基于element-ui封装表单金额输入框的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • vue3使用keep alive实现前进更新后退销毁

    vue3使用keep alive实现前进更新后退销毁

    这篇文章主要为大家介绍了vue3中使用keep alive实现前进更新后退销毁示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 如何用vite动态导入vue的路由配置详解

    如何用vite动态导入vue的路由配置详解

    这篇文章主要介绍了如何用vite动态导入vue的路由配置的相关资料,动态导入路由模仿了uniapp的页面配置文件结构,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • nuxt.js添加环境变量,区分项目打包环境操作

    nuxt.js添加环境变量,区分项目打包环境操作

    这篇文章主要介绍了nuxt.js添加环境变量,区分项目打包环境操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue顶部菜单栏实现小结

    vue顶部菜单栏实现小结

    这篇文章主要介绍了vue顶部菜单栏实现小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论