Соединение 2 узлов с angularfire2

Изображение my firebase

Im пытается сопоставить категории, которые пользователь выбрал для узла категории, чтобы получить его сведения.

Код для моего typescript :

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 ответ

  1. Вы фактически не вернули измененную карту. Вы хотите сделать что-то вроде следующего (изменено для последних версий 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
    • $key больше не включается в данные по умолчанию
    • Но можно получить используя .snapshotChanges()

    Некоторые другие полезные советы:

    • Избегайте последовательных числовых идентификаторов (т. е. массивов) в распределенных данных
    • Запишите данные так, как вы прочитаете их позже
    • Избегайте попыток сделать NoSQL похожим на SQL с большим количеством ссылок fkey и искусственной нормализации. Просто храните имена там, где вы их прочтете, как правило.
    • Денормализация данных-это нормально.