【问题标题】:Angular - Error: Error trying to diff '[object Object]'. Only arrays and iterables are allowedAngular - 错误:尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象
【发布时间】:2021-01-09 12:47:47
【问题描述】:

这个 Angular 代码不允许我显示数组。控制台中的错误显示“尝试区分'[object Object]'时出错” 我的 component.ts :

sprints : Sprint[] = [];

ngOnInit() : void {
    this.sprintService.getSprints().subscribe(
      data =>
      {
          console.log(data);
          this.sprints = data as any;
      }
    );
  }
```
this is html code :

```

<div *ngFor="let sprint of sprints">
    {{sprint.codeSprint}}
    {{sprint.title}}
  </div>
```

I got this error :

ERROR 错误:尝试比较“[object Object]”时出错。只允许使用数组和可迭代对象 在 DefaultIterableDiffer.diff (core.js:26690)

When i logged I got the array but it deosn't diplay in html page
Thanks in advance !

【问题讨论】:

  • 您能否提供您在日志记录中看到的确切数据?另外你为什么使用data as any?为什么是any
  • @Silvermind {code: 3, message: null, object: Array(20)} code: 3 message: null objet: (20) [Array(4), Array(4), Array( 4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组( 4), 数组(4), 数组(4), 数组(4), 数组(4), 数组(4), 数组(4), 数组(4)] proto: 对象跨度>
  • 您不能将data 分配给您的sprint 数组吗?使用data as any的目的是什么?
  • 对不起,我忘记了,因为在我使用我的 sprints 数组之前,像这样:sprints : any[] = [];
  • 所以data 不是数组,但data.objet 是。你知道现在该做什么了吗?

标签: angular


【解决方案1】:

*ngFor 只需要可迭代的变量或数组。

您可以简单地将data 分配给您的sprints 变量

......
data =>
  {
      console.log(data);
      this.sprints = data.objet;
  }

无需使用data as any

如果你想使用你的 Sprint[] 模型,那么

....
(data: Sprint[]) => {
   this.sprints = data.objet;
}

【讨论】:

  • 我按照你说的做了,但我仍然有同样的错误
  • data的实际输出是多少?
  • 像这样:{code: 3, message: null, objet: Array(20)} 但我想将数组显示到 html 中的表格中
  • 所以数组值位于data.objet。我已经更新了答案
  • 我收到此错误:错误属性 'objet' 在类型 'Sprint[]' 上不存在。即使我这样写我的 Sprint 类: export class Sprint { code : string;消息:字符串;对象:数组;构造函数() { } }
【解决方案2】:

具有数组数组的对象

<div *ngFor="let sprint of sprints">
   <div *ngFor="let spr of sprint">
      {{spr.codeSprint}}
      {{spr.title}}
   </div>
  </div>

ngOnInit() : void {
    this.sprintService.getSprints().subscribe(
      data =>
      {
          console.log(data);
          this.sprints = data.object;
      }
    );
  }

【讨论】:

  • 感谢您的回复,我按照您说的做了,但出现此错误:属性 'objet' 在类型 'Sprint[]' 上不存在。
  • 这是我的 Sprint 类:export class Sprint { code : string;消息:字符串;对象:数组;构造函数() { } }
  • 你是 Sprint[] 吗? {code: 3, message: null, object: Array(20)} code: 3 message: null object: (20) [Array(4), Array(4), Array(4), Array(4), Array( 4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组(4)、数组( 4), Array(4), Array(4), Array(4), Array(4), Array(4)] 或向我们展示您要迭代的样本数据
  • 是的,我的 Sprint 类包含代码(字符串)、消息(字符串)和对象类型 Array
猜你喜欢
  • 2020-08-15
  • 2019-10-26
  • 2021-12-21
  • 2018-11-25
  • 2020-05-27
  • 2018-07-15
  • 2021-03-31
  • 2018-09-14
相关资源
最近更新 更多