【发布时间】:2017-09-19 14:24:15
【问题描述】:
我创建了一个 Angular 服务,它基本上设置了一个包含一些用户信息的对象。当我更改用户时,服务会发出一个 observable,由一些兄弟组件捕获以更新信息。问题是我第一次设置数据时,还没有人订阅,所以我得到一个未定义的值。我读过关于使用 publish() 或 share() 将 observable 转换为“热”的信息,但我对 RxJS 还是很陌生,我仍然不明白它是如何 100% 工作的,所以我有点迷茫。
服务代码(相关部分):
getFwcUser() : Observable<FwcUser> {
return this.subjectFwcUser.asObservable();
}
setFwcUser(user : FwcUser) {
this.fwcUser = user;
this.subjectFwcUser.next(this.fwcUser);
}
注意:FwcUser 是一个带有一些用户字段的接口。我在按钮处理程序中运行 setFwcUser 来选择用户。
迟到的订阅者(组件代码):
ngOnInit() {
this.fwcUserService.getFwcUser()
.subscribe(
(user : FwcUser) => { console.log('Received: ', user); this.fwcUser = user; }
);
[......]
}
总是打印:'Received: undefined'。 注意:该组件位于 '*ngIf="fwcUser"' 内,因此当我从同级组件调用 'setFwcUser' 时会加载它。
我怎样才能让这个组件读取最后一个值?
另外,有人可以为初学者推荐一个学习 RxJS 的好资源吗?我正在阅读几本关于 Angular4 的书,但没有一本能清楚地解释它......
谢谢!
【问题讨论】:
-
也许它在 rsjxcoryrylan.com/blog/rxjs-observables-versus-subjects
标签: angular rxjs observable