Site icon 8HOST.COM

Что такое хуки жизненного цикла в Angular

Что такое хуки жизненного цикла в Angular

Angular предоставляет 8 хуков, которые позволяют подключаться к жизненному циклу компонентов и запускать экшены в определенных точках этого цикла.

В этом кратком руководстве мы поговорим о хуках жизненного цикла (lifecycle hooks) в Angular 2 и более свежих версиях.

Вот список доступных хуков жизненного цикла; здесь они перечислены в том порядке, в котором вызываются:

Хук ngOnInit

Давайте рассмотрим простой пример использования хука ngOnInit. Хук жизненного цикла ngOnInit вы, вероятно, будете использовать чаще всего. Если при создании компонента вам нужно выполнить много операций, рекомендуется делать это в хуке ngOnInit, а не в конструкторе:

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

@Component({

  selector: 'my-app',

  templateUrl: './app.component.html'

})

export class AppComponent implements OnInit {

  constructor() {}

  ngOnInit() {

    this.setupData();

    this.doStuff();

    // ...

  }

  setupData() {

    // ...

  }

  doStuff() {

    // ...

  }

}

Обратите внимание: мы импортируем OnInit, но внедряем его с помощью метода ngOnInit. Тот же принцип распространяется и на другие хуки жизненного цикла.

Использование нескольких хуков

Если вам нужно применить сразу несколько хуков жизненного цикла Angular, это несложно сделать:

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

@Component({

  selector: 'my-app',

  templateUrl: './app.component.html'

})

export class AppComponent implements OnInit, OnDestroy {

  constructor() {}

  ngOnInit() {

    console.log('Component Init');

  }

  ngOnDestroy() {

    console.log('Component Destroy');

  }

}

Хук ngOnChanges

Хук ngOnChanges использует объект SimpleChanges. Он немного отличается от остальных. Предположим, у нас есть такой компонент:

<my-todo [title]="title" [content]="content"></my-todo>

Для примера давайте представим, что мы хотим сделать что-то при изменении свойства title:

Дочерний компонент my-todo.component.ts

import { Component, Input, SimpleChanges, OnChanges }

  from '@angular/core';

@Component({

  // ...

})

export class MyTodoComponent implements OnChanges {

  @Input() title: string;

  @Input() content: string;

  constructor() { }

Читайте также: Доступ к компонентам, директивам и элементам DOM в Angular