您在服务中可以做的是在内部使用BehaviourSubject
存储值但将其公开为Observable。
以下是详细介绍BehaviourSubject内容的文档的引用
Subjectsubject的一个变体是BehaviorSubject,它具有“当前值”的概念。
它存储了发给消费者的最新价值
每当新的Observer订阅时,它将立即从BehaviorSubject接收“当前值”
看到
这里
更多。
服务代码:
private _user$: BehaviourSubject(null); // initially null
constructor(private http: HttpClient, private router: Router) {
this.userChangeSet.subscribe(val => this._user$.next(val))
}
get user$ () {
return this._user$.asObservable();
}
</code>
然后,您可以像在组件中一样使用它。
this.service.user$.subscribe(v => {
// do stuff here
})
</code>
注意第一个值
组件将获得将为null,因为这是初始值
行为主题。
的
编辑:
</强>
在组件中
private _destroyed$ = new Subject();
public ngOnDestroy (): void {
this._destroyed$.next();
this._destroyed$.complete();
}
</code>
然后是订阅
this.service.user$.pipe(
takeUntil(this._destroyed$)
).subscribe(v => {
// do stuff here
})
</code>
这种方法的工作方式是,当被破坏的$主体发出时,已经发出管道的观察者
takeUntil(this._destroyed$)
将取消订阅各自的来源。