【问题标题】:Firebase combined Observables in Ionic 2/Angular 2 Project - They only update onceFirebase 在 Ionic 2/Angular 2 项目中组合了 Observables - 它们只更新一次
【发布时间】:2016-11-15 03:42:33
【问题描述】:

我有一个 Ionic 2 项目,我正在使用 Firebase,我一直在尝试掌握利用可观察对象创建多对多关系的艺术。在我之前的一些问题中,我已经取得了一些进展,我可以将单独的路径聚合成一个 observable。

但是,使用我最新的代码,当我更新 Firebase 数据库中的数据时,它似乎只更新了一次 observable。之后,UI 不会更新,我必须刷新页面才能从 Firebase 数据库中提取最新数据。

这是我的功能:

public getUserProfile(data) {
    return this._af.database
      .object(`/social/users/${data.id}`)

      // Switch to the joined observable

      .switchMap((user) => {

        let vidKeys = Object.keys(user.videos);


        return Observable.combineLatest(
          vidKeys.map((vidKey) => this._af.database
            .object(`/social/videos/${vidKey}`)
          ),
          (...videos) => {
            vidKeys.forEach((vidKey, index) => { user.videos[vidKey] = videos[index] });
            return user;
          }
        );
      });
  }

更新:添加调用此函数的代码。

在我的组件中:

ionViewDidLoad() {

    this._users.getUserProfile({id: 'c25zdGFyb3NjJJuYtREaYWlsLmNvbQ=='}).subscribe(success => {
      this.user = success;

      this.videoKeys = Object.keys(this.user.videos);
    });

  }

在我的模板中:

<div *ngFor="let key of videoKeys">
        {{user.videos[key].title}}
        <img src="{{user.videos[key].thumbnail}}" />
      </div>

这是我的用户的数据库对象的样子:

{
    users: {
     c25zdGFyb3NjJJuYtREaYWlsLmNvbQ==
       videos {
         AFA-rOls8YA: true,
         AlLsp4gnyDQ: true,
         dX_1B0w7Hzc: true,
         ik5qR5bw75E: true,
         njos57IJf-0: true
       },
       videos {
         AFA-rOls8YA {
           attached_members {
             c25zdGFyb3NjJJuYtREaYWlsLmNvbQ==: true
           }
           title: "Hello...it's me"
         },
         AlLsp4gnyDQ: { ... },
         dX_1B0w7Hzc: { ... },
        }
      }
    }
}

这个问题是我上一个问题here的延伸。

我对 observables 还是比较陌生,但是有人认为他们知道这里会发生什么吗?

【问题讨论】:

  • 能否包含一些调用和使用 getUserProfile 返回的 observable 的代码?你能确认你没有在返回的 observable 上使用 firsttake(1) 吗?
  • 好吧,我意识到我还需要显示模板。我不确定我是否如何呈现可观察的订阅结果,但我必须按照我在代码中的方式进行操作。会不会有影响?现在都在那里

标签: angular firebase firebase-realtime-database ionic2


【解决方案1】:

好的,经过反复试验,我意识到发布的代码或我之前的答案没有任何问题。我的代码中有一个错误,我在测试期间没有发现。我评论了问题代码,并且更新按预期持续进行。

让这节课成为一个教训,在此课程中,您将原本可以正常工作的代码检查四次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2017-04-09
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    相关资源
    最近更新 更多