当前位置:首页 > VUE

vue 实现跨行表格

2026-02-11 10:50:30VUE

跨行表格的实现方法

在 Vue 中实现跨行表格通常需要结合 HTML 的 rowspan 属性。以下是几种常见的方法:

使用原生 HTML 表格

通过 v-for 循环数据并结合 rowspan 属性实现跨行效果。数据需要预先处理以标记哪些单元格需要跨行。

<template>
  <table border="1">
    <tr>
      <th>姓名</th>
      <th>科目</th>
      <th>成绩</th>
    </tr>
    <tr v-for="(item, index) in tableData" :key="index">
      <td v-if="item.showName" :rowspan="item.nameRowspan">{{ item.name }}</td>
      <td>{{ item.subject }}</td>
      <td>{{ item.score }}</td>
    </tr>
  </table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', showName: true, nameRowspan: 2, subject: '语文', score: 90 },
        { subject: '数学', score: 85 },
        { name: '李四', showName: true, nameRowspan: 3, subject: '语文', score: 88 },
        { subject: '数学', score: 92 },
        { subject: '英语', score: 78 }
      ]
    }
  }
}
</script>

使用 Element UI 表格组件

Element UI 的 el-table 组件通过自定义 span-method 方法实现合并行或列。

<template>
  <el-table
    :data="tableData"
    border
    :span-method="arraySpanMethod"
    style="width: 100%">
    <el-table-column prop="name" label="姓名" width="180"></el-table-column>
    <el-table-column prop="subject" label="科目"></el-table-column>
    <el-table-column prop="score" label="成绩"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', subject: '语文', score: 90 },
        { name: '张三', subject: '数学', score: 85 },
        { name: '李四', subject: '语文', score: 88 },
        { name: '李四', subject: '数学', score: 92 },
        { name: '李四', subject: '英语', score: 78 }
      ]
    }
  },
  methods: {
    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        if (rowIndex % 2 === 0) {
          return { rowspan: 2, colspan: 1 }
        } else {
          return { rowspan: 0, colspan: 0 }
        }
      }
    }
  }
}
</script>

使用 VxeTable 高级表格

VxeTable 提供了更便捷的合并单元格功能,通过配置 merge-cells 属性实现。

<template>
  <vxe-table
    border
    :data="tableData"
    :merge-cells="mergeCells">
    <vxe-column field="name" title="姓名"></vxe-column>
    <vxe-column field="subject" title="科目"></vxe-column>
    <vxe-column field="score" title="成绩"></vxe-column>
  </vxe-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', subject: '语文', score: 90 },
        { name: '张三', subject: '数学', score: 85 },
        { name: '李四', subject: '语文', score: 88 },
        { name: '李四', subject: '数学', score: 92 },
        { name: '李四', subject: '英语', score: 78 }
      ],
      mergeCells: [
        { row: 0, col: 0, rowspan: 2 },
        { row: 2, col: 0, rowspan: 3 }
      ]
    }
  }
}
</script>

数据处理建议

实现跨行表格前,通常需要对数据进行预处理:

vue 实现跨行表格

  • 为需要合并的单元格添加标记属性(如 rowspan 值)
  • 计算每个合并区域的行数
  • 过滤掉被合并的重复数据行
function processData(originalData) {
  const result = []
  let currentName = ''
  let count = 0

  originalData.forEach((item, index) => {
    if (item.name !== currentName) {
      currentName = item.name
      count = originalData.filter(x => x.name === currentName).length
      result.push({ ...item, showName: true, nameRowspan: count })
    } else {
      result.push({ ...item, showName: false })
    }
  })

  return result
}

注意事项

  • 合并行时需要确保被合并的行数据具有相同的合并依据值(如相同的姓名)
  • 动态数据更新时需要重新计算合并规则
  • 过于复杂的合并逻辑可能影响渲染性能
  • 移动端显示时需要考虑合并后的表格在小屏幕下的可读性

以上方法可以根据具体项目需求选择使用,原生表格适合简单场景,UI 框架提供的功能更适合复杂交互需求。

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

相关文章

css怎么制作表格

css怎么制作表格

使用HTML和CSS制作表格 在HTML中,表格由<table>标签定义,结合CSS可以灵活控制样式。 基本HTML结构: <table> <tr>…

表格制作css

表格制作css

CSS表格样式设计 基础表格样式 通过border-collapse合并边框,使表格更整洁。width控制整体宽度,text-align设置文字对齐方式。 table { border-coll…

vue实现表格透明

vue实现表格透明

实现表格透明的方法 在Vue中实现表格透明效果,可以通过CSS样式调整表格的背景透明度。以下是几种常见的方法: 设置表格背景透明度 通过CSS的background-color属性配合rgba()…

vue 实现页面 表格

vue 实现页面 表格

Vue 实现页面表格的方法 Vue 提供了多种方式实现表格功能,可以根据需求选择不同的方案。以下是常见的实现方法: 使用原生 HTML 表格 通过 Vue 的模板语法直接渲染表格数据: <t…

vue实现表格删除

vue实现表格删除

Vue 实现表格删除功能 在 Vue 中实现表格删除功能,通常需要结合数据绑定和事件处理。以下是一个完整的实现方法: 模板部分 <template> <div>…

vue实现表格添加

vue实现表格添加

实现表格添加功能 在Vue中实现表格添加功能需要结合数据绑定和事件处理。以下是一个完整的实现方案: 基础表格结构 使用v-for指令渲染表格数据,绑定到组件的data属性: <templat…