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