订阅Observable时如何获得最后的价值? [英] How to get last value when subscribing to an Observable?
问题描述
我有两个Angular2组件,需要通过服务共享数据:
I have two Angular2 components which need to share data via a service:
@Injectable()
export class SearchService {
private searchResultSource = new Subject<string>()
searchResult$ = this.searchResultSource.asObservable()
setSearchResults(_searchResult: string): void {
this.searchResultSource.next(_searchResult)
}
}
假定呈现ComponentA
并通过SearchService.setSearchResults
发出事件.然后,用户导航到ComponentB
,它也订阅了searchResult$
.但是,ComponentB
永远不会观察到ComponentA
发出的事件,因为在ComponentA
发出事件时它尚未订阅searchResult$
,因为它不存在.
Suppose ComponentA
is rendered and it emits an event via SearchService.setSearchResults
. Then the user navigates to ComponentB
, which also subscribes to searchResult$
. However, ComponentB
will never observe the event emitted by ComponentA
because it was not subscribed to searchResult$
at the time ComponentA
emitted an event, as it did not exist.
如何创建一个Observable
,它向每个新订户发出最后一个事件?
How can I create an Observable
which emits the last event to every new subscriber?
推荐答案
BehaviorSubject
立即向新订户发出最后一个值:
BehaviorSubject
immediately emits the last value to new subscribers:
@Injectable()
export class SearchService {
private searchResultSource = new BehaviorSubject<string>('');
setSearchResults(_searchResult: string): void {
this.searchResultSource.next(_searchResult);
}
}
ReplaySubject
将所有先前的事件发送给新订阅者.
ReplaySubject
emits all previous events to new subscribers.
这篇关于订阅Observable时如何获得最后的价值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!