#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
.