如何迭代AngularFire可观察列表?

时间:2017-01-02 18:32:55

标签: angular firebase firebase-realtime-database angularfire2

如何在AngularFire可观察列表上正确迭代? 我不确定如何处理数据,因为每个响应都返回列表中的所有成员加上一个新成员(如"金字塔") -

first response: [{obj1}]
second response: [{obj1}, {obj2}]
third response: [{obj1}, {obj2}, {obj3}]

我尝试在我的代码中实现两个解决方案,它们似乎都不是正确的方法。

第一个解决方案使用rxjs map - 但它太过分了,因为它每次迭代整个响应。

getAllSchools(): Observable<any> {
    return this.angularFire.database.list('schools').map((response) => {
        return response.map(school => {
            return \\do something to school\\
        })
    })
}

这意味着在上面的示例中(迭代schools列表)&#34; 对学校做了一些事情&#34;将被执行到school1,然后再次执行到school1,第一次执行到school2。然后第三次到school1,第二次到school2,第一次到school1等等。

我尝试实施的第二个解决方案是使用preserveSnapshot。这里的问题是,我不能肯定它只返回一次和一次数据。

getAllSchools(): Observable<ISchool> {
    return new Observable(observer => {
        this.angularFire.database.list('schools', { preserveSnapshot: true })
            .subscribe(snap => {
                snap.forEach((school) => {
                    ///do things to school///
                    observer.next(school)
                })
            })
    })
}

这是一个非常基本的问题,我确信解决方案非常简单&#34;。尽管如此,我还是找不到明确的解决方案。

是否有必要使用其他库,例如one

非常感谢!

1 个答案:

答案 0 :(得分:0)

angularFire最新版本更新(仅一周前)解决了这个问题。跑完&#34; npm i angularfire2 @ next&#34; (&#34; angularfire2&#34;:&#34; ^ 2.0.0-beta.7.1-pre&#34;),一切正常。

了解更多信息 - https://github.com/angular/angularfire2/issues/574