【问题标题】:Angular *ngFor Array of Objects returning [ERROR: Cannot find a differ supporting object]Angular *ngFor 对象数组返回 [错误:找不到不同的支持对象]
【发布时间】:2017-11-10 19:43:58
【问题描述】:

我正在尝试在 HTML 中显示如下数据列表:

Home.ts

this.key = 0
objects = {} // The correct setting was objects = [] thanks!

snapshot.forEach(doc => {

          this.objects[this.key] = {
            firstname: doc.id,
            lastname: doc.data().lastname,
            age: doc.data().age
          }

          this.key=this.key+1;
        }

当以 JSON 格式显示时,结果如下:

console.log(JSON.stringify(this.objects));

// RESULT OF THE CONSOLE:

{
 "0":
    {
        "firstname":"james",
        "lastname":"bond",
        "age":"87"
    },

 "1":
    {
        "firstname":"alex",
        "lastname":"tali",
        "age":"59"
    }
 } 

现在当我使用时:

console.log(this.objects[0].firstname);

// The Result displays:
james

这是正确的行为! 但是,当尝试使用 *ngFor 在 HTML 中显示列表时,它给了我错误:找不到不同的支持对象。

这是我在 Home.html HTML/IONIC 中的代码:

    <ion-grid>
      <ion-row>
        <ion-col col-4>First Name</ion-col>
        <ion-col col-4>Last Name</ion-col>
        <ion-col col-4>Age</ion-col>
      </ion-row>
      <ion-row>
        <ion-col col-4 *ngFor="let firstname of objects; let i = index">{{ objects[i].firstname }}</ion-col>
        <ion-col col-4 *ngFor="let lastname of objects; let i = index">{{ objects[i].lastname }}</ion-col>
        <ion-col col-4 *ngFor="let age of objects; let i = index">{{ objects[i].age }}</ion-col>
      </ion-row>
    </ion-grid> 

我可以如何正确实现上述内容?从逻辑上讲,它应该可以正常工作!因为类似的 console.log 给出了正确的结果。 在进行大量研究时,我偶然发现了这个主题:https://github.com/angular/angular/issues/6392

说实话,我不确定它是否适合我的问题。

非常感谢!

【问题讨论】:

  • 您的第一项不是数组,即使您将键命名为 0-n。 {} 是一个对象(在 ngfor 中不使用),[] 是一个数组(在 ngfor 中使用)。
  • 是的,这就是解决方案!

标签: angular ionic-framework ngfor


【解决方案1】:

正如错误所说,对象应该是对象的 array,根据您的 JSON,它是对象的对象。您需要有正确的 JSON 数组,或转换为对象数组。

console.log(JSON.stringify(this.global.objects));

【讨论】:

  • 如何将其转换为对象数组?
  • @JamesAnd: 做this.objects = Object.values(this.objects);
  • @Sajeetharan 由 Typescript 编译的 Angular 包括 es6 polyfills 不是吗?我刚刚在 Firefox 上进行了测试,它确实有效。实际上,根据Mozilla Docs,它适用于 Chrome、Edge、Firefox、Opera 和 Safai 的版本
  • 我正在使用 ionic cordova run android 直接在 android 上测试它
猜你喜欢
  • 2020-11-22
  • 2018-10-12
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多