我在服务中定义了一个行为主题,并且我使用我在另一个组件中定义的变量指向该主题,在该组件的视图中,我使用该变量订阅主题,例如:
服务:
public exampleSubjebt$ = new BehaviorSubject<boolean>(true);
组件. ts:
ngOninit() {
let someVariable = this.service.exampleSubject$;
}
组件的观点:
<app-something [options]="someVariable | async"></app-something>
我的问题是,可观察对象位于服务中,我使用变量直接从那里调用它,是否使异步管道不会在组件销毁时取消订阅?
订阅位于组件中,而不是服务中,因此当组件被销毁时,异步管道将正确取消订阅。
是的,它确实取消订阅。异步管道是一个角指令,因此它具有组件所具有的所有生命周期。在实现中,我发现了以下内容:
class ObservableStrategy implements SubscriptionStrategy {
createSubscription(async: Observable<any>, updateLatestValue: any): SubscriptionLike {
return async.subscribe({next: updateLatestValue, error: (e: any) => { throw e; }});
}
dispose(subscription: SubscriptionLike): void { subscription.unsubscribe(); }
onDestroy(subscription: SubscriptionLike): void { subscription.unsubscribe(); }
}
在ngOnDemroy中,他们称之为处置
ngOnDestroy(): void {
if (this._subscription) {
this._dispose();
}
}