【问题标题】:Firebase / Angularfire2: nested data nodes in firebaseFirebase / Angularfire2:firebase中的嵌套数据节点
【发布时间】:2017-08-19 14:12:03
【问题描述】:

我有一个 firebase 数据库。一个名为 /config// 的节点,它保存用户特定的数据。我现在想用汽车列表向用户数据添加一个子树,例如 /config//cars/:

"config" : {
    "NE5AwHcxKofMPKRCAvny5Re4MtG3" : {
      "geburtstag" : "2017-06-04",
      "nachname" : Mueller",
      "cars" : {
        "-Krr2-DC1uoqCvgVJhFL" : {
          "name" : "Ford Mustang"
        },
        "-Krue4_5kJQhis-3Qg1X" : {
          "name" : "Toyota Supra"
        }
      }
    }

我创建了一个到 /config/ 的可观察绑定

this.$ref = this.database.object('/config/' + uid);
this.data = this.$ref.subscribe();

我可以访问主配置节点的数据并将其与角度绑定,但 Cars 子节点上的 ngFor 不起作用。我的数据结构是错误的还是我需要在这里进行某种映射?

html部分:

<ion-item *ngFor="let car of data.cars | async">
    {{car.name}}
 </ion-item>

【问题讨论】:

  • 请分享包含ngFor的html

标签: firebase angularfire2


【解决方案1】:

您将data 分配给您的订阅,而您应该将其分配给可观察对象:

cars: FirebaseListObservable<any[]>;
this.cars = this.database.list(`/config/${uid}/cars`);

现在您可以在 ngFor 循环中调用您的 async 数据:

<ion-item *ngFor="let car of cars | async">
  {{ car.name }}
</ion-item>

【讨论】:

  • 谢谢,这行得通。这太明显了。但为什么它也不能这样工作呢? this.config = this.database.object(/config/${uid});
  • 因为这是一个对象 - 而不是一个数组。你不能在对象中使用ngFor
  • 为什么当我通过 /config/${uid} 访问树时它是一个对象 -> config.cars 当我通过 /config/${uid}/cars 访问它时它是一个数组 ->汽车?数据一样吗?
  • 当您调用 db.object() 方法时,您正在重试包含特定用户数据的对象 - firebase 数据库只是一个 JSON 文件,因此您这样做只会得到一个对象.当您需要对象列表(数组)时,您可以使用来自angularfiredb.list() 方法。这会将对象列表转换为数组。 documentation 解释得更好。
  • 我收到错误:找不到名称 'uid' 确定此语法仍然是最新的吗?
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多