AngularFire2查询多个键并将结果列为数组

时间:2017-06-13 06:54:04

标签: angular typescript firebase firebase-realtime-database angularfire2

我已接近解决这个问题,但在解决意外问题方面需要一些帮助。

项目: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(),则在浏览器中仍然可以看到一个收藏夹,直到页面刷新。

感谢您的帮助!

0 个答案:

没有答案