我已接近解决这个问题,但在解决意外问题方面需要一些帮助。
项目:Angular 4,Firebase,AngularFire2,TypeScript,Material 2.
我有一个项目列表。用户可以将项目保存为像这样存储的收藏夹,并存储每个项目键:
{
"kpnnEpz6bSaG64FcLxqgWvG5oMl2": {
"asgs3100lp23rp9068": true,
"asgs3100lp2rp48722": true,
"asgs3100lp57rp885450": true,
"asgs3100lp8rp195616": true
}
}
然后我得到每个喜欢的项目键的项目数据,如下所示:
ngOnInit() {
this.favourites = this.getFavs()
}
getFavs(): Observable <any[]> {
return this.db.list(`/userFavourites/${this.authService.authState.uid}`)
.map((favKeys: MapItem[]) => favKeys
.map((favKey: MapItem) => {
return this.db.object(`/data/baseData/features/${favKey.$key}`)
}))
.switchMap((favs) => {
return Observable.combineLatest(favs);
});
}
removeAllFavs() {
const item = this.db.object(`/userFavourites/${this.authService.uid}`);
item.remove()
}
然后html是:
<md-list>
<h3 md-subheader>Favourites</h3>
<md-list-item *ngFor="let favourite of favourites | async">
{{favourite.$key}} <!--Plus other data-->
</md-list-item>
</md-list>
这似乎运作良好。但是,当我使用removeAllFavs()函数时,所有项目都会从Firebase中成功删除,但是,列表中的第一项仍然存在于dom中,并且在重新加载页面之前不会被删除。
例如,如果用户有10个收藏夹,则在md-list-item中成功加载10个收藏夹。但是,如果用户removeAllFavs(),则在浏览器中仍然可以看到一个收藏夹,直到页面刷新。
感谢您的帮助!