使用 Angular 指令,是否需要取消订阅服务?

With Angular Directives, do Service subscriptions need to be unsubscribed?

使用Angular 10,我有一个监听服务的指令。在这种情况下我需要取消订阅那个 Observable 吗?

例如:

@Directive({
    selector: '[appShowFoo]'
})
export class ShowFooDirective {
    @HostBinding('class.foo') foo: boolean;

    constructor(private _fooService: FooService) {
        this._fooService.foo$.subscribe(foo => this.foo = foo);
    }
}

总是退订。活动订阅占用内存,如果不清理会导致内存泄漏,而不是您使用它们的地方。

像这样的事情会在可观察到的完成时清除订阅。

const sub = this.observable$.subscribe(
    value =>{...}, 
    error => {...}, 
    /*onComplete*/
    () => sub.unsubscribe()
);

对于一次性操作,您可以调用 toPromise() 并使用 thenawait