vue实用demo使用表格(el-table)的span-method属性实现表格行合并

1 demo效果

在这里插入图片描述
如上图实现表格中性别这一列实现行合并

2 实现要点

2.1 计算合并表格行所需数据

该方法的主要目的是在表格渲染前,为表格合并行准备合并所需的数据,示例中是通过表格中的性别来判断是否需要合并

// 为表格行合并准备数据
getRowList() {
  this.rowList = []
  this.rowListpos = 0
  this.tableData.forEach((item, index, arr) => {
    // 表格第一行必须保留
    if (index === 0) {
      this.rowList.push(1)
      this.rowListpos = 0
    } else {
      // 判断当前行性别与上一行性别是否相同 如果相同则合并
      if (item.sex === arr[index - 1].sex) {
        this.rowList[this.rowListpos] += 1
        this.rowList.push(0)
      } else {
        this.rowList.push(1)
        this.rowListpos = index
      }
    }
  })
}

2.2 配置span-method属性

el-table中的span-method属性用来配置计算合并行或列的计算方法,该属性的回调函数有四个参数row、column、rowIndex、columnIndex,该方法需要返回一个对象,这个对象包含两个属性:rowspan和colspan两个属性,rowspan表示占用行数,colspan表示占用列数,如果两个值都为0表示不用合并

// 表格合并行的计算方法
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  //第三列表格合并行
  if (columnIndex === 2) {
    if (this.rowList[rowIndex]) {
      const rowNum = this.rowList[rowIndex]
      return {
        rowspan: rowNum,
        colspan: rowNum > 0 ? 1 : 0
      }
    } else {
      return {
        rowspan: 0,
        colspan: 0
      }
    }
  }
}

3 demo代码

<template>
  <el-table :data="tableData" style="width: 40%" border :span-method="objectSpanMethod">
    <el-table-column prop="date" label="日期" width="180">
    </el-table-column>
    <el-table-column prop="name" label="姓名" width="180">
    </el-table-column>
    <el-table-column prop="sex" label="性别" width="180">
    </el-table-column>
    <el-table-column prop="address" label="地址">
    </el-table-column>
  </el-table>
</template>
<script>
export default {
  name: '',
  data() {
    return {
      rowList: [],
      rowListpos: 0,
      tableData: [
        {
          date: '2016-05-02',
          name: '王小虎',
          sex: '男',
          address: '上海市普陀区金沙江路 1518 弄'
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          sex: '男',
          address: '上海市普陀区金沙江路 1517 弄'
        },
        {
          date: '2016-05-01',
          name: '王小',
          sex: '女',
          address: '上海市普陀区金沙江路 1519 弄'
        },
        {
          date: '2016-05-03',
          name: '王小',
          sex: '女',
          address: '上海市普陀区金沙江路 1516 弄'
        }
      ]
    }
  },
  mounted() {
    this.getRowList()
  },
  methods: {
    // 表格合并行的计算方法
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      //第三列表格合并行
      if (columnIndex === 2) {
        if (this.rowList[rowIndex]) {
          const rowNum = this.rowList[rowIndex]
          return {
            rowspan: rowNum,
            colspan: rowNum > 0 ? 1 : 0
          }
        } else {
          return {
            rowspan: 0,
            colspan: 0
          }
        }
      }
    },
    // 为表格行合并准备数据
    getRowList() {
      this.rowList = []
      this.rowListpos = 0
      this.tableData.forEach((item, index, arr) => {
        // 表格第一行必须保留
        if (index === 0) {
          this.rowList.push(1)
          this.rowListpos = 0
        } else {
          // 判断当前行性别与上一行性别是否相同 如果相同则合并
          if (item.sex === arr[index - 1].sex) {
            this.rowList[this.rowListpos] += 1 //需要合并的行数累加1
            this.rowList.push(0)
          } else {
            this.rowList.push(1)
            this.rowListpos = index
          }
        }
      })
    }
  }
}
</script>

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2 中使用 Element UI 的 el-table 组件时,有一个非常实用的方法叫做 span-method,可以用来合并单元格,将具有相同值的单元格合并成一个大单元格,使表格更加美观,同时也方便用户查看。 span-method 接受一个回调函数作为参数,回调函数的参数有两个,分别是 row 和 column,表示当前单元格所在的和列。回调函数需要返回一个对象,对象的属性有两个,分别是 rowspan 和 colspan,表示需要合并数和列数。 具体使用方法如下: 1. 在 el-table 组件中添加 span-method 属性,值为回调函数的名称或函数表达式。 ``` <el-table :data="tableData" :span-method="mergeCell"> // ... </el-table> ``` 2. 实现回调函数 mergeCell,返回需要合并数和列数。 ``` methods: { mergeCell(row, column) { if (column.property === 'name') { if (row.index % 2 === 0) { return { rowspan: 2, colspan: 1 }; } else { return { rowspan: 0, colspan: 0 }; } } } } ``` 上面的代码实现了一个简单的合并单元格的效果,将表格中每两的 name 列合并成一个单元格。具体实现方式是,如果是偶数,则返回需要合并数为 2,列数为 1;如果是奇数,则返回需要合并数为 0,列数为 0,表示该单元格不需要合并。 需要注意的是,如果需要合并的单元格中有其他单元格,则需要将需要合并的单元格的值设置为 null,否则会出现合并单元格后其他单元格的值无法显示的问题。 以上就是 span-method 方法的详解,希望能帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值