You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 8非Material UI表格如何通过JSON实现列重排?

Angular 8自定义表格实现列重排方案

要实现表头和表格内容的同步列重排,核心思路是让表格内容的渲染逻辑完全依赖表头数组的顺序,不再硬编码每个<td>的字段。以下是具体实现步骤:

1. 优化表头配置(可选但推荐)

在你的tableHeaders中添加field字段,用来映射transactions数据对象中的属性名,让表头和数据的关联更清晰:

this.tableHeaders = [
  {
    id: 'first_name', 
    value: "Name",
    field: "firstName" // 对应transaction中的firstName属性
  },
  {
    id: 'reg_no', 
    value: "Reg No",
    field: "regNo" // 对应transaction中的regNo属性
  },
  {
    id: 'course_name', 
    value: "Course",
    field: "course" // 对应transaction中的course属性
  }
];

2. 修改表格模板,同步内容列顺序

将原来硬编码的<td>改为遍历tableHeaders数组,根据每个表头的field字段动态获取数据:

<table>
  <thead class="thead-light">
    <tr>
      <th *ngFor="let header of tableHeaders">
        {{ header.value }}
      </th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let data of transactions">
      <!-- 遍历表头数组,动态生成td -->
      <td *ngFor="let header of tableHeaders">
        {{ data[header.field] }}
      </td>
    </tr>
  </tbody>
</table>

3. 实现列重排逻辑

现在只要调整tableHeaders数组的顺序,表头和表格内容就会自动同步更新。例如,添加一个交换列的函数:

swapNameAndRegNoColumns() {
  // 交换数组中第0和第1项的位置
  [this.tableHeaders[0], this.tableHeaders[1]] = [this.tableHeaders[1], this.tableHeaders[0]];
}

在模板中添加触发按钮:

<button (click)="swapNameAndRegNoColumns()">交换姓名与学号列</button>

备选方案:不修改表头结构的实现

如果不想改动现有的tableHeaders结构,可以通过一个映射函数来关联表头ID和数据字段:

// 组件内定义映射函数
getFieldValue(transaction: any, headerId: string): any {
  const idFieldMap = {
    'first_name': 'firstName',
    'reg_no': 'regNo',
    'course_name': 'course'
  };
  return transaction[idFieldMap[headerId]];
}

模板中调用该函数:

<td *ngFor="let header of tableHeaders">
  {{ getFieldValue(data, header.id) }}
</td>

核心原理

通过让表格内容的渲染完全依赖tableHeaders数组的顺序和配置,只要维护这个数组的排序,Angular的变更检测机制会自动更新整个表格的列顺序,实现表头与内容的同步重排。

内容的提问来源于stack exchange,提问作者Anamik Adhikary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:05:45