【问题标题】:Angular Project: Cannot find a differ supporting object '[object Object]' of type 'object'Angular 项目:找不到“object”类型的不同支持对象“[object Object]”
【发布时间】:2021-10-18 08:48:07
【问题描述】:

我几乎要辞职了。我有这个我无法解决的问题。对于我的第一个 Angular 项目,我遇到了以下错误: 找不到“object”类型的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Array 等 Iterables

基本上我创建了一个调用外部 json 文件的服务 在服务中我放了这些方法:

export class PiattiService {

  url="https://mywebsite.eccc/db.json";
  constructor(private http:HttpClient) { }




  get():Observable<Piatto[]>{
    return this.http.get<Piatto[]>(this.url);
  }

我通过声明与我得到的json文件等效的字段来创建一个接口类

export class Piatto{
  id:number;
  titolo:string;
  image:string;
  label:string;
  prezzo:string;
  categoria:string;
  inevidenza:string;
  commenti:string;
}

在 COMPONENT TS 文件中,我按如下方式调用此服务:

export class MostrapiattiComponent implements OnInit {

  piatti:Piatto[];
 

  constructor(private http:HttpClient, private servizioPiatti:PiattiService) { }




  ngOnInit() {
      this.servizioPiatti.get().subscribe((osserva)=>{
      this.piatti=osserva;
    })
  }

}

在 html 文件中,我尝试从 *ngfor 迭代所有内容

<tr *ngFor="let piatto of piatti ">
    <td>{{piatto.id}}</td><td>{{piatto.titolo}}</td>
  </tr>

但是出错了

【问题讨论】:

标签: angular


【解决方案1】:

你需要用一个空数组初始化piatti:Piatto[]

piatti:Piatto[]=[];

您还需要更新 HTTP 调用,因为它没有返回数组。

return this.http.get&lt;Piatto[]&gt;(this.url).pipe(map(res=&gt;res.piatti))

【讨论】:

  • 错误是一样的:
  • RROR 错误:尝试比较“[object Object]”时出错。 DefaultIterableDiffer.diff (core.js:21604) at NgForOf.ngDoCheck (common.js:3190) at callHook (core.js:2536) at callHooks (core.js:2495) at executeCheckHooks (core .js:2427) 在 refreshView (core.js:9481) 在 refreshComponent (core.js:10643) 在 refreshChildComponents (core.js:9268) 在 refreshView (core.js:9522) 在 refreshEmbeddedViews (core.js:10597)
  • 请问console.log(osserva) .
  • console.log(osserva) 结果:{piatti: Array(4), insalate: Array(2), impasti: Array(2), chisiamo: Array(1), messaggi: Array(0 ), …} chisiamo: [{…}] impasti: (2) [{…}, {…}] insalate: (2) [{…}, {…}] messaggi: [] piatti: (4) [{ …}、{…}、{…}、{…}] 首选:[] [[Prototype]]:对象
  • return this.http.get&lt;Piatto[]&gt;(this.url).map(res=&gt;res.piatti) 在进行 http 调用时试试这个
【解决方案2】:

我已经解决了。谢谢大家

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 2019-09-15
  • 2018-04-10
  • 2019-03-05
  • 1970-01-01
  • 2018-01-13
  • 2020-08-30
相关资源
最近更新 更多