嗨,我的朋友们,我在ionic4应用程序中有代码可以从Firestore检索数据,我尝试使用此代码来做到这一点,但它没有显示任何这些数据
我尝试在我的代码中使用snapshotChanges(),但是失败了 而且我也想检索文档ID,该怎么办
我的代码在下面:
news.page.ts
import { Component, OnInit } from '@angular/core';
import {AngularFirestore, AngularFirestoreDocument} from 'angularfire2/firestore';
import {Observable} from 'rxjs';
import { Router } from '@angular/router';
import 'rxjs/add/operator/map';
export class FilmsPage implements OnInit {
news: Observable<any[]>;
constructor(public db: AngularFirestore, private router: Router) { }
ngOnInit() {
this.db.collection('123').snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
});
}
news.page.html
<ion-content padding>
<ion-item *ngFor=" let count of news | async">
<ion-button routerLink="/details/{{count.id}}">{{count.name}} -> id: {{count.id}}</ion-button>
</ion-item>
</ion-content>
答案 0 :(得分:0)
目前您的实现存在几个问题。
第一个问题是,您需要将this.db.collection('123').snapshotChanges()...
的结果分配给您的news: Observable<any[]>
类属性,以便能够有效地使用模板中的async
管道:
ngOnInit() {
this.news = this.db.collection('123').snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
});
下一个问题取决于您的RxJS版本。如果您的项目使用RxJS 5.5+,则应使用pipeable operators。这将涉及更新map
运算符的导入以及更新它与snapshotChanges()
一起使用的方式。实际上,它只是在map()
内移动pipe()
:
import { map } from 'rxjs/operators';
// ...
ngOnInit() {
this.news = this.db.collection('123').snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
})
);
});
希望有帮助!