vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vxe-grid与vxe-table实现表格尾部合并

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

作者:pity_fan

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

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

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

使用 vxe-grid 实现尾部合并

核心配置项

代码示例

<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 }
  ]
}
 

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

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

使用 vxe-table 实现尾部合并

核心配置差异

代码示例

<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 }]
}

关键点

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

两种方式对比总结

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

1. 动态列定义

2. 尾部合并配置

关键参数:

3. 数据绑定

4. 动态更新机制

关键注意事项

性能优化建议

总结

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

您可能感兴趣的文章:
阅读全文