Отмена подписки на Observable — важная часть работы с RxJS в Angular, чтобы избежать утечек памяти. Вот основные способы:
Самый простой способ — сохранить подписку и отменить её вручную:
private subscription: Subscription;
ngOnInit() {
this.subscription = someObservable.subscribe(data => {
// обработка данных
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
Плюсы:
Минусы:
Более элегантный способ с использованием другого Observable:
private destroy$ = new Subject<void>();
ngOnInit() {
someObservable
.pipe(takeUntil(this.destroy$))
.subscribe(data => {
// обработка данных
});
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
Плюсы:
Минусы:
complete()
Лучший способ для подписок, связанных с отображением данных:
// В компоненте
data$ = someObservable;
// В шаблоне
{{ data$ | async }}
Плюсы:
Минусы:
Если нужен только первый результат:
someObservable
.pipe(first())
.subscribe(data => {
// обработка только первого значения
});
Аналогично first()
, но с явным указанием количества значений:
someObservable
.pipe(take(1))
.subscribe(data => {
// обработка одного значения
});
rxjs-angular
для автоматической проверкиЛучшие практики: