uni-app table配合v-for使用并能合并单元格

发布于 1周前 作者 eggper 来自 Uni-App

uni-app table配合v-for使用并能合并单元格

无相关信息

1 回复

在uni-app中,使用<table>标签配合v-for指令来渲染表格数据,并实现单元格合并,可以通过自定义渲染逻辑和样式来实现。由于HTML原生<table>标签在uni-app中并不完全支持复杂的合并单元格操作,我们通常使用CSS样式和自定义组件来模拟这种行为。

下面是一个简化的例子,演示如何在uni-app中使用v-for渲染表格,并通过CSS和计算属性来模拟合并单元格:

<template>
  <view class="container">
    <view class="table">
      <view class="thead">
        <view class="tr">
          <view class="th">#</view>
          <view class="th">Name</view>
          <view class="th">Age</view>
        </view>
      </view>
      <view class="tbody">
        <view v-for="(row, rowIndex) in formattedData" :key="rowIndex" class="tr">
          <view class="td" :style="{ rowSpan: row.rowSpan }">{{ rowIndex + 1 }}</view>
          <view class="td" :style="{ borderLeft: rowIndex === 0 ? '1px solid #000' : 'none' }">{{ row.name }}</view>
          <view class="td">{{ row.age }}</view>
        </view>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      data: [
        { name: 'Alice', age: 25 },
        { name: 'Bob', age: 30, merge: true }, // Merge with the next row
        { name: 'Charlie', age: 35 },
        { name: 'David', age: 40, merge: true },
        { name: 'Eve', age: 45 }
      ]
    };
  },
  computed: {
    formattedData() {
      let result = [];
      this.data.forEach((item, index) => {
        if (item.merge && index < this.data.length - 1) {
          result.push({ ...item, rowSpan: 2, name: `${item.name} + Next` });
          result.push({ ...this.data[index + 1], rowSpan: 0, name: '' });
          index++; // Skip the next item as it's already merged
        } else {
          result.push({ ...item, rowSpan: 1 });
        }
      });
      return result;
    }
  }
};
</script>

<style>
.container {
  padding: 16px;
}
.table {
  width: 100%;
  border-collapse: collapse;
}
.th, .td {
  border: 1px solid #000;
  padding: 8px;
  text-align: left;
}
.tr {
  display: flex;
}
</style>

注意:

  1. 示例中的formattedData计算属性用于处理合并单元格的逻辑,根据merge字段动态调整rowSpan
  2. 由于uni-app的视图层限制,这里通过CSS样式模拟了表格边框和单元格合并效果。
  3. 实际应用中可能需要更复杂的逻辑来处理不同方向的单元格合并(如列合并),这通常涉及到更多的计算和对DOM结构的调整。
回到顶部