gpt4 book ai didi

javascript - Firebase 节点删除后 View 没有变化

转载 作者:太空宇宙 更新时间:2023-11-04 15:57:09 24 4
gpt4 key购买 nike

更新:以下问题与 combineLatest 在向其传递空数组时不发出任何内容有关。这可能不是您的具体问题,但如果您的 View 在移除或删除 Firebase 节点后未更新,请检查特定运算符对空数组的处理。正如解决方案中所述,一些类似 combineLatest 的组件在收到空数组时不会发出任何信号,从而导致 View 没有变化。

看下面的例子:

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
}

在第一个示例中,如果您在 View 中渲染一个项目,例如 {{data.property}} 并删除整个 data 节点从 Firebase 中, View 中呈现的项目将保留在 View 中。换句话说,它将保留在那里,直到页面重新加载。

在最后两个示例中,当项目正在观察的 Firebase 对象被删除时,该项目将停止渲染。

为什么?

最佳答案

在第一个示例中,当您从数据库中删除数据时,列表将发出一个空数组。当 switchMap 操作收到该数据时,一个空数组将被传递给 combineLatest

根据内存,当 combineLatest 传递一个空数组时,它不会发出任何内容。如果没有发出任何内容, View 不会发生任何变化,因此之前渲染的数据仍然存在。

如果您要检查接收到的数组的长度并在收到数组时发出一个空数组,您应该会看到 View 已更新。

通过检查长度,我的意思是做这样的事情:

return joinedObservables.length ?
Observable.combineLatest(joinedObservables, () => data) :
Observable.of([]);

关于javascript - Firebase 节点删除后 View 没有变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42605950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com