Update: Die folgende Frage bezieht sich auf combineLatest
, die nichts ausgibt, wenn ein leeres Array an sie übergeben wird. Dies ist möglicherweise nicht Ihr Problem, aber wenn Ihre Ansicht nach dem Entfernen oder Löschen eines Firebase-Knotens nicht aktualisiert wird, überprüfen Sie die Handhabung leerer Arrays durch bestimmte Operatoren. Wie in der Lösung beschrieben, geben einige wie combineLatest
nichts aus, wenn sie leere Arrays erhalten, was zu keiner Änderung der Ansicht führt.Keine Änderung nach Löschen des Firebase-Knotens anzeigen
Nehmen Sie das folgende Beispiel:
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
}
... und vergleichen zu diesem Beispiel:
doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
.map(data => data.filter(data.poperty === predicate))
return results
}
oder ein noch einfacheres Beispiel:
doSomething(): Observable<any> {
let results = this.af.database.list(`path/to/something`)
return results
}
Im Fall von Das erste Beispiel, wenn Sie ein Objekt in Ihrer Ansicht rendern, wie z. B. {{data.property}}
und Löschen Sie den gesamten Knoten data
aus Firebase, das in der Ansicht gerenderte Objekt bleibt in der Ansicht bestehen. Mit anderen Worten, es bleibt dort, bis die Seite neu geladen wird.
In den letzten beiden Beispielen wird das Objekt nicht mehr angezeigt, sobald das Firebase-Objekt gelöscht wird.
Warum?
Dank, wie immer, cartant. Würdest du vielleicht demonstrieren, wie du die Länge von Arrays überprüfen kannst, die "combinedLated" erhalten könnte? –
Ein Beispiel hinzugefügt. – cartant
Hmm, dies verursacht immer noch keine Emission, wenn der Knoten gelöscht wird. Ich protokolliere Emissionen einfach in der Konsole und wenn ich den Knoten zu Firebase oder Subscribe hinzufüge, protokolliert die Konsole das Objekt. Wenn ich den Knoten lösche, wird nichts protokolliert. –