我有两个需要通过服务共享数据的Angular2组件:
@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$
,因为它不存在 .
如何创建 Observable
,向每个新订阅者发送最后一个事件?
2 回答
BehaviorSubject
立即向新订阅者发出最后一个值:ReplaySubject
向新订阅者发送所有先前的事件 .您可以使用ReplaySubject始终获取Observer的最后一个值,如下所示:
并且只是正常订阅 .
可以在这里找到更高级的example:caching results with angular2 http service