Проверяет понимание жизненного цикла Angular-компонента и необходимости освобождать ресурсы при его уничтожении.
Angular управляет жизненным циклом компонентов и директив через набор хуков. Один из них — ngOnDestroy, который вызывается один раз, непосредственно перед тем как Angular удалит компонент из DOM и уничтожит его экземпляр. В этот момент важно освободить всё, что компонент «захватил» во время своей работы, иначе эти ресурсы останутся в памяти и продолжат работать, хотя компонента уже нет.
setTimeout и setInterval.window, document, resize, scroll).FormControl, valueChanges, router.events.@Component({ selector: 'app-timer', template: '{{ value }}' })
export class TimerComponent implements OnInit, OnDestroy {
value = 0;
private intervalId?: number;
private destroy$ = new Subject<void>();
ngOnInit() {
this.intervalId = window.setInterval(() => this.value++, 1000);
someService.stream$
.pipe(takeUntil(this.destroy$))
.subscribe(v => this.value = v);
}
ngOnDestroy() {
clearInterval(this.intervalId);
this.destroy$.next();
this.destroy$.complete();
}
}
Часто вместо ручной отписки от каждого Observable используют паттерн takeUntil(destroy$) или async-pipe, который автоматически отписывается при уничтожении компонента. Но для таймеров, глобальных слушателей и внешних соединений ngOnDestroy остаётся обязательным местом очистки.
Итог: ngOnDestroy нужен для корректного освобождения ресурсов при удалении компонента — это защищает приложение от утечек памяти и неожиданных побочных эффектов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию