Lifecycle Hooks, czyli haki życia komponentu, to specjalne metody w Angularze, które oferują możliwość interwencji w różne momenty cyklu życia komponentów i dyrektyw. Dzięki nim, deweloperzy mogą wykonywać określone akcje w kluczowych momentach, takich jak inicjalizacja komponentu, detekcja zmian, czy też jego zniszczenie.
Podstawowe Lifecycle Hooks
W Angularze istnieje kilka głównych haków życia komponentu, które pomagają zarządzać różnymi aspektami działania komponentu:
ngOnInit
: Wywoływany raz, po pierwszym wyświetleniu danych związanych z komponentem.ngOnChanges
: Wywoływany, kiedy Angular wykryje zmiany w danych wejściowych komponentu.ngDoCheck
: Można używać do manualnego sprawdzania zmian w komponencie.ngAfterContentInit
: Wywoływany po wstawieniu treści do widoku komponentu.ngAfterContentChecked
: Wywoływany po sprawdzeniu zawartości włożonej przez Angular.ngAfterViewInit
: Wywoływany po inicjalizacji widoku komponentu i jego dzieci.ngAfterViewChecked
: Wywoływany po każdym sprawdzeniu widoku komponentu i jego dzieci.ngOnDestroy
: Wywoływany tuż przed usunięciem komponentu z DOM.
Przykład Użycia Lifecycle Hooks w Komponencie
Załóżmy, że tworzymy komponent UserProfileComponent
, który wykorzystuje kilka ważnych lifecycle hooks, aby zarządzać danymi użytkownika.
- Definicja Komponentu
// user-profile.component.ts
import { Component, Input, OnInit, OnDestroy, SimpleChanges, OnChanges } from '@angular/core';
@Component({
selector: 'app-user-profile',
standalone: true,
template: `<p>Profil użytkownika: {{ userData.name }}</p>`,
styleUrls: ['./user-profile.component.css']
})
export class UserProfileComponent implements OnInit, OnChanges, OnDestroy {
@Input() userData: { name: string, age: number };
constructor() {
console.log('UserProfileComponent constructed');
}
ngOnChanges(changes: SimpleChanges): void {
console.log('NgOnChanges triggered:', changes);
}
ngOnInit(): void {
console.log('Component initialized with data:', this.userData);
}
ngOnDestroy(): void {
console.log('Component is being destroyed');
}
}
Użycie Komponentu w Aplikacji
<!-- Some parent component template -->
<app-user-profile [userData]="currentUser"></app-user-profile>
Wyjaśnienie Kodu
- Konstruktor (
constructor
): Używany do inicjalizacji podstawowych wartości, serwisów lub innych zależności. Nie jest to lifecycle hook, ale jest ważnym elementem inicjalizacji klasy w Angularze. ngOnChanges
: Reaguje na zmiany w@Input()
properties. W przykładzie rejestruje zmiany w danych wejściowychuserData
.ngOnInit
: Idealne miejsce do inicjalizacji komponentu, np. pobrania danych z serwera. W przykładzie loguje dane użytkownika po ich inicjalizacji.ngOnDestroy
: Umożliwia wykonanie sprzątania, takiego jak anulowanie subskrypcji obserwabli. W przykładzie loguje informacje o zniszczeniu komponentu.