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

Angular动态遍历数组生成表格:为何直接遍历对象无效?

问题原因与解决方案

嘿,这个问题我碰到过!你的代码没法正常运行的核心原因很明确:
Angular的*ngFor指令只能遍历可迭代对象(比如数组、Map、Set这类实现了Iterable接口的类型),而你循环里的item是普通的JavaScript对象——默认情况下JS对象是不可迭代的,所以*ngFor="let list of item"这一行会直接报错,Angular不知道怎么遍历一个对象的键值对。

下面给你几个可行的解决方案:

方案1:在模板中用Object.values()遍历对象值

你可以用Object.values(item)把对象的所有值转换成数组,这样*ngFor就能正常遍历了。不过要注意:模板默认不能直接访问全局的Object对象,需要在组件类里把它暴露出来。

组件类代码:

import { Component } from '@angular/core';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html'
})
export class YourComponent {
  items = [{name: "jean", surname: "kruger"}, {name: "bobby", surname: "marais"}];
  // 把Object暴露给模板
  Object = Object;
}

模板代码:

<table>
  <tr *ngFor="let item of items">
    <td *ngFor="let value of Object.values(item)">{{value}}</td>
  </tr>
</table>

方案2:如果需要同时显示键和值,用Object.entries()

要是你想把属性名(比如name、surname)也展示出来,可以用Object.entries(),它会把对象转换成[键, 值]形式的数组:

模板代码(同样需要在组件类里暴露Object):

<table>
  <tr *ngFor="let item of items">
    <td *ngFor="let [key, value] of Object.entries(item)">
      {{key}}: {{value}}
    </td>
  </tr>
</table>

方案3:在组件类提前处理成数组

如果你不想在模板里写Object.values(),也可以在组件类里提前把每个对象转换成值数组,模板直接遍历处理好的数组:

组件类代码:

import { Component } from '@angular/core';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html'
})
export class YourComponent {
  items = [{name: "jean", surname: "kruger"}, {name: "bobby", surname: "marais"}];
  // 提前把每个对象转换成值数组
  itemValues = this.items.map(item => Object.values(item));
}

模板代码:

<table>
  <tr *ngFor="let values of itemValues">
    <td *ngFor="let value of values">{{value}}</td>
  </tr>
</table>

这三个方案都能解决你的问题,选哪个看你具体需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:07