Как восстановить document.id в базе данных Firestore? - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в Angular, Firestore и Firebase.

У меня есть компонент, который выбирает все документы моего героя. Мне удалось собрать всех героев и перечислить их имена в списке. Сейчас я пытаюсь получить hero.id, чтобы передать этот идентификатор моему компоненту маршрутизации и отобразить подробный вид этого героя. Хотя мне не удается достать hero.id. Как вы получаете идентификатор документа?

Я пытался просто сделать: hero.id но, похоже, не работает ???

heroes.component.ts:

import { Component, OnInit } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';
import { Observable } from 'rxjs/Observable';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  heroes: Observable<any[]>;

  constructor(db: AngularFirestore){
    this.recipes = db.collection('heroes').valueChanges();
  }

  ngOnInit() {
  }
}

heroes.component.html

<ul>
  <li class="text" *ngFor="let hero of heroes | async">
    <a routerLink="/hero/{{hero.id}}">{{hero.name}} -> id: {{hero.id}}</a>
  </li>
</ul>

Любая помощь очень ценится! Спасибо! :)

1 Ответ

0 голосов
/ 28 апреля 2018

ID в метаданных записи. Метаданные можно получить с помощью snapshotChanges() (вы используете valueChanges()).

this.recipes = db.collection('heroes').snapshotChanges().map(actions => {
  return actions.map(a => {
    const data = a.payload.doc.data();
    const id = a.payload.doc.id;
    return { id, ...data };
  });
});

Теперь ваши наблюдаемые объекты вещают также со свойством id, и вы можете использовать async pipe, как вы используете сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...