【发布时间】: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 上使用first或take(1)吗? -
好吧,我意识到我还需要显示模板。我不确定我是否如何呈现可观察的订阅结果,但我必须按照我在代码中的方式进行操作。会不会有影响?现在都在那里
标签: angular firebase firebase-realtime-database ionic2