大多数通过AngularFire从Firebase的FireStore提取数据的示例:
(a)显示使用Observable<any[]>
来获取数据:
export class AppComponent {
items: Observable<any[]>;
constructor(db: AngularFirestore) {
this.items = db.collection('items').valueChanges();
}
}
(b)使用到async
的管道将其与模板绑定:
<ul>
<li class="text" *ngFor="let item of items | async">
{{item.name}}
</li>
</ul>
我没有看到如何简单地获取data: SomeModel[]
而不是data: Observable<SomeModel[]>
的示例……经过一番努力,我找到了一种解决方法:
async getData(): Promise<SomeModel[]> {
return await new Promise((resolve, reject) => {
this.myCollection.snapshotChanges().subscribe(data => {
this.data = data.map(e => {
return {
id: e.payload.doc.id,
...e.payload.doc.data()
};
});
resolve(this.data);
});
});
}
但是,作为该领域的新手,我的解决方案让人感到困惑,我正在寻找最佳方法。谢谢您的时间!
答案 0 :(得分:1)
您应该使用异步管道而不是设置实例属性,因为异步管道会处理onDestory上的取消订阅。但是,如果您确实想将结果分配给属性,则只需在subscribe()
中进行分配 getModel():Observable<MyModel[]>{
this.myCollection.snapshotChanges().map((data) => {
return this.data = data.map(e => {
return {
id: e.payload.doc.id,
...e.payload.doc.data()
};
});
});
}
this.getModel().subscribe(data=>this.data=data)