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

Angular如何遍历值为自定义对象的Object并渲染表格?

解决Angular中遍历对象值渲染表格的问题

我太懂你这困扰了——Angular的*ngFor指令默认只认数组,而你定义的team是个键值对结构的对象,直接遍历当然没效果!给你两个简单好用的解决方案,都能实现你想要的表格渲染效果:

方案1:使用Angular内置的KeyValuePipe

这是最省心的方法,不用改组件逻辑,直接在模板里用管道把对象转成可遍历的结构:

修改你的表格模板代码:

<table>
  <tbody>
    <!-- 用keyvalue管道把对象转为{key, value}格式的数组 -->
    <tr *ngFor="let item of team | keyvalue">
      <!-- item.value就是对应的Racer实例 -->
      <td>{{item.value.number}}</td>
      <td>{{item.value.name}}</td>
      <td>{{item.value.places[0] || '-'}}</td>
    </tr>
  </tbody>
</table>

小提示:KeyValuePipe默认会按对象的键排序,如果想保持对象原本的顺序,可以自定义一个排序函数,比如在组件里加:

originalOrder() {
  return 0;
}

然后模板里写成*ngFor="let item of team | keyvalue: originalOrder"

方案2:在组件中将对象转为数组

如果你需要对选手列表做更多处理(比如排序、过滤),可以在组件里把team对象的值转成数组,再给模板遍历:

在你的组件类里添加一个getter:

get racersList(): Racer[] {
  // Object.values()会提取对象的所有值,返回一个Racer数组
  return Object.values(this.team);
}

然后模板里直接遍历这个数组:

<table>
  <tbody>
    <tr *ngFor="let racer of racersList">
      <td>{{racer.number}}</td>
      <td>{{racer.name}}</td>
      <td>{{racer.places[0] || '-'}}</td>
    </tr>
  </tbody>
</table>

这两种方法都能完美解决你的问题,选哪种看你后续有没有额外的业务需求~

内容的提问来源于stack exchange,提问作者Robert Głowacki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:59:21