【发布时间】:2017-03-05 08:02:25
【问题描述】:
更新:以下问题与 combineLatest 在将空数组传递给它时不发射任何东西有关。这可能不是您的具体问题,但如果您的视图在移除或删除 Firebase 节点后没有更新,请检查您的特定操作员对空数组的处理。如解决方案中所述,像combineLatest 这样的一些在接收到空数组时不发出任何内容,从而导致视图没有变化。
举个例子:
doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
.switchMap(data => {
let joinedObservables: any[] = [];
data.forEach(item => {
joinedObservables.push(this.af.database
.object(`path/to/something/else`)
.do(this => {
item.value = this.value;
})
)
})
return Observable.combineLatest(joinedObservables, () => data)
})
return results
}
...并与此示例进行比较:
doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
.map(data => data.filter(data.poperty === predicate))
return results
}
或者更简单的例子:
doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
return results
}
在第一个示例的情况下,如果您在视图中呈现一个项目,例如 {{data.property}},并从 Firebase 中删除整个 data 节点,则在视图中呈现的项目将保留在视图中。换句话说,它会一直保留到页面重新加载。
在最后两个示例中,项目将在其观察的 Firebase 对象被删除时停止渲染。
为什么?
【问题讨论】:
标签: javascript angular firebase rxjs angularfire2