[英]AngularFire - How to map firestore documents to an array on valueChanges?
在我的 angular web 应用程序中,我使用 angularfire 库与 firestore 进行交互。
在组件的构造函数中,我想订阅文档集合,并在触发值更改函数时将文档映射到数组。
我可以使用提供的语法轻松地在前端显示列表。
//component constructor
constructor(private afs: AngularFirestore) {
this.itemsCollection = afs.collection<Item>('items');
this.items = this.itemsCollection.valueChanges();
}
//component template
<ul>
<li *ngFor="let item of items | async">
{{ item.name }}
</li>
</ul>
但是,我需要该集合中文档的数组(或对象),因为我需要执行一些逻辑来呈现其他内容。 例如,我有一个“isChecked”函数,它根据该文档集合中是否存在某个项目来决定是否选中复选框。
async isChecked(itemID) {
if(items[itemID]) {
return true;
} else {
return false
}
}
那么,如何将文档获取到另一个变量并在 valueChanges 上保持更新?
this.itemsCollection.valueChanges()
.pipe(
tap(res => {
this.items = res;
})
)
.subscribe();
并且在需要从 html 中删除异步管道之后,在这种情况下,您将能够将项目用作对象或数组,而不是可观察的,也许对您来说会更容易。 也不要忘记在 ngOnDestroy 中取消订阅
你可以使用 rxjs 地图操作符
this.items = this.itemsCollection.valueChanges().pipe(map (res) => ... );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.