Вы можете просто запросить вашу коллекцию comments
следующим образом:
...
constructor(private afs: AngularFirestore) {
afs.collection('comments', ref => ref.where('photoId','==', this.idOfPhotoYouAreDisplaying)).valueChanges()
}
...
, если вы хотите проверить null
в шаблоне, вы можете присвоить результат переменной (например, comments
):
comments: Comment[];
comments$: Observable<Comment[]>;
constructor(private db: AngularFirestore) {
this.comments$ = this.db.collection(config.collection_comments, ref => ref.where('photoId', '==', this.photoId))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Comment;
const id = a.payload.doc.id;
return { id, ...data };
});
}));
}
ngOnInit() {
this.comments$.subscribe(c => this.comments == c);
}
Теперь в вашем шаблоне вы можете проверить comments
:
<div *ngIf="comments">
<div *ngFor="let comment of comments">
...
</div>
</div>
Примечание 1: Вам не нужно назначать егопеременная.Вы можете проверить с помощью канала async
в ngIf
, но когда вы зациклите свои комментарии, снова с помощью async
вы создадите вторую подписку, что приведет к тому, что ваш запрос будет выполнен дважды.
Примечание 2: Использование канала async
обрабатывает отмену подписки вашего наблюдаемого.При подписке в компоненте вы должны справиться с этим самостоятельно.(Несколько способов сделать это)