kdu*_*kdu 30 observable rxjs typescript angular
我有两个需要通过服务共享数据的Angular2组件:
@Injectable()
export class SearchService {
private searchResultSource = new Subject<string>()
searchResult$ = this.searchResultSource.asObservable()
setSearchResults(_searchResult: string): void {
this.searchResultSource.next(_searchResult)
}
}
Run Code Online (Sandbox Code Playgroud)
假设ComponentA已呈现并且它通过发出事件SearchService.setSearchResults.然后用户导航到ComponentB,也订阅searchResult$.但是,ComponentB永远不会观察发出的事件,ComponentA因为它searchResult$在ComponentA发出事件时没有订阅,因为它不存在.
如何创建Observable向每个新订阅者发送最后一个事件的内容?
Gün*_*uer 45
BehaviorSubject 立即向新订阅者发出最后一个值:
@Injectable()
export class SearchService {
private searchResultSource = new BehaviorSubject<string>('');
setSearchResults(_searchResult: string): void {
this.searchResultSource.next(_searchResult);
}
}
Run Code Online (Sandbox Code Playgroud)
ReplaySubject 向新订阅者发送所有先前的事件.
tib*_*bus 12
您可以使用ReplaySubject始终获取Observer的最后一个值,如下所示:
@Injectable()
export class SearchService {
private searchResultSource = new ReplaySubject<string>(1);
setSearchResults(_searchResult: string): void {
this.searchResultSource.next(_searchResult);
}
}
Run Code Online (Sandbox Code Playgroud)
只是正常订阅.可以在此处找到
更高级的示例:使用angular2 http服务缓存结果