Angular - 使用 ngFor 显示包含列和行的数据 headers

Angular - using ngFor to display data with column and row headers

我在显示包含列和行 headers 的 table 中的数据时遇到问题。我试图通过使用 *ngFor 使其动态化。你能建议在这种情况下如何处理 *ngFor 吗?

包含数据的 Ts 文件:

export class NewScreen {
  rows = [
    'Name',
    'Surname',
    'Subjects',
    'Grade',
  ];

  data = [
    {
      student: 'Student 1',
      name: 'Alex',
      surname: 'Smith',
      subjects: ['Math','Geometry'],
      grade: ['A','B'],
    },
    {
      student: 'Student 2',
      name: 'Michael',
      surname: 'Laurent',
      subjects: ['Math','Geometry'],
      grade: ['B','C'],
    },
    {
      student: 'Student 3',
      name: 'Sophie',
      surname: 'Miller',
      subjects: ['Math','Geometry'],
      grade: ['A','A'],
    },
  ];
}

HTML: 我一直在尝试找到解决方案放入 {{???}} 中,这将导致显示以下 table 结构,但没有运气:

<table>
  <thead>
     <tr>
        <th></th>
        <th *ngFor="let column of data">{{ column.student }}</th>
     </tr>
  </thead>
  <tbody>
     <tr *ngFor="let row of rows">
         <th>{{ row }}</th>
         <td *ngFor="let value of data | keyvalue">{{ value.value[i + 1] }}</td>
     </tr>
  </tbody>
</table>

我根据 HTML 和您提供的数据创建了一个简单示例 https://stackblitz.com/edit/angular-vuzjyk

{{ item.value }} 显示 [object Object] 的原因是您没有给它一个标识符来选择您希望显示的 object 的 属性。

为了简化,我更新了您的 rows[] 以匹配您的数据键以直接使用它。

  rows = ['name', 'surname', 'subjects', 'grade'];

在 HTML 中,我只是使用该行来标识我们希望显示的 属性。同样在 <th> 中,我将每个 header.

的第一个字母大写
   <tr *ngFor="let row of rows">
       <th>{{ row.charAt(0).toUpperCase() + row.slice(1) }}</th>
       <td *ngFor="let item of data">
           {{ item[row] }} 
       </td>
   </tr>

查看我上面给出的 stackblitz link,如果您有任何疑问,请随时提问。