Hack Frontend Community

Методы жизненного цикла компонента в Angular

Компоненты в Angular проходят через ряд этапов жизненного цикла — от создания до уничтожения. Angular предоставляет специальные методы (хуки), которые позволяют «встраиваться» в эти этапы и выполнять нужную логику.

Основные хуки жизненного цикла

Метод (хук)Когда вызывается
ngOnChanges()Когда изменяются входные @Input() свойства
ngOnInit()Один раз после инициализации компонента
ngDoCheck()На каждом цикле проверки изменений (custom change detection)
ngAfterContentInit()После вставки контента в <ng-content>
ngAfterContentChecked()После каждой проверки вставленного контента
ngAfterViewInit()После инициализации представления (ViewChild)
ngAfterViewChecked()После каждой проверки представления компонента
ngOnDestroy()Перед удалением компонента из DOM

Порядок вызова хуков

ngOnChanges (при наличии @Input)
→ ngOnInit
→ ngDoCheck
→ ngAfterContentInit
→ ngAfterContentChecked
→ ngAfterViewInit
→ ngAfterViewChecked
(далее — ngDoCheck → ngAfterContentChecked → ngAfterViewChecked — циклично)
→ ngOnDestroy (при удалении компонента)

Пример использования жизненных хуков

import {
  Component,
  OnInit,
  OnChanges,
  OnDestroy,
  Input
} from '@angular/core';

@Component({
  selector: 'app-example',
  template: `<p>Пример жизненного цикла</p>`
})
export class ExampleComponent implements OnInit, OnChanges, OnDestroy {
  @Input() data: string = '';

  constructor() {
    console.log('constructor');
  }

  ngOnChanges() {
    console.log('ngOnChanges: data изменилось');
  }

  ngOnInit() {
    console.log('ngOnInit: компонент инициализирован');
  }

  ngOnDestroy() {
    console.log('ngOnDestroy: компонент удалён');
  }
}

Когда использовать?

ХукДля чего использовать
ngOnInitИнициализация данных, подписки, начальные действия
ngOnChangesРеакция на изменение входных свойств (@Input)
ngOnDestroyОчистка таймеров, отписка от потоков, WebSocket и т.д.
ngAfterViewInitРабота с ViewChild (DOM) после отображения
ngDoCheckКастомная логика при обновлениях (редко используется)

Совет:

Самыми часто используемыми являются ngOnInit, ngOnDestroy, и ngOnChanges. Остальные нужны для более тонкой настройки и специфических случаев.