当前位置:首页 > 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>

数据处理逻辑

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

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

样式优化

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

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 可以更简单实现:

vue 实现跨行表格

<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表格联动的方法 使用Vue的响应式数据和计算属性 通过Vue的响应式数据特性,可以轻松实现表格之间的联动。定义一个共享的数据源,并在多个表格组件中使用这个数据源。利用计算属性对数据进行处理,…

css怎么制作表格

css怎么制作表格

使用HTML和CSS创建表格 HTML提供<table>标签用于创建表格结构,结合CSS可以自定义样式。以下是基本实现方法: HTML结构 <table> <th…

css好看的表格制作

css好看的表格制作

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

vue实现表格追加

vue实现表格追加

实现表格数据追加的方法 在Vue中实现表格数据追加可以通过多种方式完成,主要涉及数据绑定和数组操作。以下是几种常见的方法: 数据绑定与v-for指令 通过v-for指令渲染表格数据,利用数组的co…

vue表格实现导出

vue表格实现导出

使用 vue-json-excel 插件 安装插件: npm install vue-json-excel --save 在组件中引入并注册: import JsonExcel from 'vue…

vue实现表格修改

vue实现表格修改

Vue 实现表格修改的方法 使用 v-model 绑定数据 在 Vue 中可以通过 v-model 实现双向数据绑定,适用于表格单元格的编辑。 为表格的每个单元格绑定 v-model,动态修改数据。…