提问者:小点点

异步管道是否从服务中定义并从组件变量指向的可观察对象取消订阅?


我在服务中定义了一个行为主题,并且我使用我在另一个组件中定义的变量指向该主题,在该组件的视图中,我使用该变量订阅主题,例如:

服务:

public exampleSubjebt$ = new BehaviorSubject<boolean>(true);

组件. ts:

ngOninit() {
let someVariable = this.service.exampleSubject$;
}

组件的观点:

<app-something [options]="someVariable | async"></app-something>

我的问题是,可观察对象位于服务中,我使用变量直接从那里调用它,是否使异步管道不会在组件销毁时取消订阅?


共2个答案

匿名用户

订阅位于组件中,而不是服务中,因此当组件被销毁时,异步管道将正确取消订阅。

匿名用户

是的,它确实取消订阅。异步管道是一个角指令,因此它具有组件所具有的所有生命周期。在实现中,我发现了以下内容:

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();
  }
}