【问题标题】:No View Change After Firebase Node DeletionFirebase 节点删除后视图没有变化
【发布时间】: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


    【解决方案1】:

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

    从内存中,当 combineLatest 传递一个空数组时,它什么也不发出。由于没有发出任何内容,因此视图看不到任何变化,因此之前渲染的数据仍然存在。

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

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

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

    【讨论】:

    • 一如既往地感谢卡坦特。您能演示一下如何检查combinedLated 可能收到的任何数组的长度吗?
    • 添加了一个例子。
    • 嗯,当节点被删除时,这仍然不会导致发射通过。我只是将排放记录到控制台,当我将节点添加到 firebase 或订阅时,控制台会记录该对象。如果我删除节点,则不会记录任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2019-06-06
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多