使用angularfire2加入2个节点

时间:2016-12-28 10:14:38

标签: javascript angular firebase firebase-realtime-database angularfire2

Image of my firebase

我试图将用户喜欢的类别映射到类别节点以检索其详细信息。

我的打字稿代码:

ionViewDidLoad(categorykey:string){
console.log('Hello Manage Favourite Page');
let userid = this.authData.getID();

this.favouritecategories = this.af.database.list(`/users/${userid}/favourites`)
  .map(favourites => {
    favourites.map(category => {
      let categorykey = category.$key
      console.log(categorykey);
      category.favname = this.af.database.object(`/test/${categorykey}`)
    });
      return favourites;
  });

我的Html代码:

<div *ngFor="let region of favouritecategories | async; let i = index;">

    <ion-item (click)=" category.hidden = !category.hidden; category.visible = !category.visible" detail-none><b>{{i+1}}.{{ (category.favname| async)?.name }}</b>
      <ion-icon name="arrow-down" [hidden]="category.visible" item-right></ion-icon>
      <ion-icon name="arrow-up" [hidden]="!category.visible" item-right></ion-icon></ion-item>

</div>

使用上面的代码,我只设法检索类别的名称而不是区域名称。任何人都知道怎么做?

1 个答案:

答案 0 :(得分:0)

您还没有真正返回修改后的地图。您想要执行以下操作(针对最新的AngularFire版本进行了修改):

let listObservable = this.af.database.list(`/users/${userid}/favourites`);
// use snapshotChanges() as this contains the keys
this.favouritecategories = listObservable.snapshotChanges()
  .map(snapshots => {
    // note that we return the inner .map()!
    return snapshots.map(snap => {
      let data = snap.val();
      data.favname = this.af.database.object(`/test/${snap.key}`).valueChanges();
      // note also that we return the transformed data
      return data;
    });
  });

与原始海报的问题有所不同:

  • 应使用.valueChanges()为ngFor ops获取有用的observ
  • 默认情况下,$ key不再包含在数据中
  • 但可以使用.snapshotChanges()
  • 获得

其他一些有用的提示:

  • 避免分布式数据中的连续数字ID(即数组)
  • 写下您稍后将如何阅读的数据
  • 避免尝试使用大量的fkey引用和人工规范化使NoSQL看起来像SQL。只需存储您通常会将其读取的名称。
  • 可以对数据进行非规范化。