С помощью директив Angular нужно ли отменять подписки на услуги?

#angular #angular-directive

#angular #angular-директива

Вопрос:

Используя Angular 10, у меня есть директива, которая прослушивает службу. Нужно ли мне отказаться от подписки на это, наблюдаемое в этом сценарии?

Например:

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

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

Ответ №1:

Всегда отменяйте подписку. Активные подписки — это то, что занимает память и, если не очищено, вызывает утечку памяти, а не там, где вы их используете.

Что-то вроде этого очистит подписку после наблюдаемого завершения.

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

 

Для одноразовых операций вы можете просто вызвать toPromise() и использовать then or await .