当前位置:首页 > VUE

vue 实现跨行表格

2026-03-28 21:18:10VUE

跨行表格实现方法

使用 rowspan 属性

在 Vue 中可以通过 v-for 结合 rowspan 实现跨行表格。关键点在于计算每个单元格需要跨越的行数。

<template>
  <table>
    <tr v-for="(row, rowIndex) in processedData" :key="rowIndex">
      <td v-for="(cell, cellIndex) in row" :key="cellIndex" :rowspan="cell.rowspan">
        {{ cell.value }}
      </td>
    </tr>
  </table>
</template>

数据处理逻辑

需要预先处理数据,标记需要合并的单元格及其跨越行数:

vue 实现跨行表格

data() {
  return {
    tableData: [
      { category: 'A', item: 'Item 1', value: 10 },
      { category: 'A', item: 'Item 2', value: 20 },
      { category: 'B', item: 'Item 3', value: 30 }
    ]
  }
},
computed: {
  processedData() {
    const grouped = {}
    this.tableData.forEach(item => {
      if (!grouped[item.category]) {
        grouped[item.category] = []
      }
      grouped[item.category].push(item)
    })

    return Object.entries(grouped).flatMap(([category, items]) => {
      return items.map((item, index) => {
        return [
          { 
            value: category, 
            rowspan: index === 0 ? items.length : 0 
          },
          { 
            value: item.item, 
            rowspan: 1 
          },
          { 
            value: item.value, 
            rowspan: 1 
          }
        ]
      })
    })
  }
}

样式优化

添加基础样式使表格更美观:

vue 实现跨行表格

table {
  border-collapse: collapse;
  width: 100%;
}
td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}

动态合并单元格

对于动态数据,可以使用计算属性自动计算合并规则:

methods: {
  calculateRowspans(data, key) {
    const spans = []
    let count = 0

    for (let i = data.length - 1; i >= 0; i--) {
      if (i === data.length - 1 || data[i][key] !== data[i + 1][key]) {
        count = 1
      } else {
        count++
      }
      spans[i] = count
    }

    return spans
  }
}

第三方组件方案

使用现成的表格组件如 Element UIVxeTable 可以更简单实现:

<el-table :data="tableData" :span-method="arraySpanMethod">
  <el-table-column prop="category" label="Category"></el-table-column>
  <el-table-column prop="item" label="Item"></el-table-column>
  <el-table-column prop="value" label="Value"></el-table-column>
</el-table>
methods: {
  arraySpanMethod({ row, column, rowIndex, columnIndex }) {
    if (columnIndex === 0) {
      if (rowIndex % 2 === 0) {
        return { rowspan: 2, colspan: 1 }
      }
      return { rowspan: 0, colspan: 0 }
    }
  }
}

标签: 跨行表格
分享给朋友:

相关文章

vue 表格实现

vue 表格实现

Vue 表格实现方法 基础表格实现 使用 el-table 组件(Element UI)实现基础表格: <template> <el-table :data="tableDat…

vue实现重置表格数据

vue实现重置表格数据

重置表格数据的方法 在Vue中重置表格数据通常涉及清空或重新初始化数据绑定的数组或对象。以下是几种常见实现方式: 直接重置数据源 对于基于数组的表格数据,可以直接将数据数组重置为空或初始值:…

vue表格实现单选框

vue表格实现单选框

Vue 表格实现单选框的方法 在 Vue 中实现表格单选框功能,可以通过结合 el-table(Element UI)或原生表格与 Vue 的数据绑定特性完成。以下是几种常见实现方式: 使用 Ele…

css好看的表格制作

css好看的表格制作

使用CSS制作美观表格的方法 边框与间距优化 通过border-collapse属性合并边框,避免双边框效果。设置padding增加单元格内边距,提升可读性。 table { border-…

vue实现表格树

vue实现表格树

Vue 实现表格树的方法 使用递归组件实现树形表格 在 Vue 中可以通过递归组件实现树形表格结构。定义一个组件,该组件可以调用自身来渲染子节点。 <template> <ta…

vue实现表格编辑

vue实现表格编辑

Vue 实现表格编辑的方法 在 Vue 中实现表格编辑功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定数据 通过 v-model 绑定表格数据,结合 v-for 动态渲染…