更新:以下問題與combineLatest
有關,因此在將空數組傳遞給它時不會發出任何內容。這可能不是您的問題,但如果您的視圖在刪除或刪除Firebase節點後未更新,請檢查特定運營商對空陣列的處理情況。如解決方案中所述,有些像combineLatest
當它們收到空陣列時不會發出任何內容,導致視圖中沒有更改。刪除Firebase節點後沒有看到更改
看看下面的例子:
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對象被刪除的那一刻將不再呈現。
爲什麼?
感謝一如既往,cartant。你可能會證明你如何去檢查'combinedLated'可能接收到的任何數組的長度嗎? –
添加了一個示例。 – cartant
嗯,當節點被刪除時,這仍然不會導致發射。我只是將排放量記錄到控制檯,當我將節點添加到firebase或訂閱時,控制檯會記錄該對象。如果我刪除節點,則不記錄任何內容。 –