Angular
Cycle de Vie

ngOnInit()

La méthode ngOnInit() est exécutée une seule fois, juste après qu'Angular a fini de créer le composant. C'est l'endroit parfait pour aller chercher des données (par exemple depuis une base de données ou une API).

Le Constructeur

Il sert uniquement à initialiser la classe et injecter des services (comme le Router ou HTTP). Il ne faut jamais faire de requêtes lourdes ici, car le composant n'est pas encore prêt visuellement.

ngOnInit()

Il s'exécute quand Angular a fini de préparer le composant et ses variables (Inputs). C'est le signal de départ officiel pour lancer vos requêtes et afficher vos données.


Exemple Pratique : Appel API dans le ngOnInit

Leanne Graham
#1

Sincere@april.biz

Ervin Howell
#2

Shanna@melissa.tv

Clementine Bauch
#3

Nathan@yesenia.net

Patricia Lebsack
#4

Julianne.OConner@kory.org

Chelsey Dietrich
#5

Lucio_Hettinger@annie.ca

Mrs. Dennis Schulist
#6

Karley_Dach@jasper.info

Le Code Source

ngoninit.component.ts
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-ngoninit',
  standalone: true,
  imports: [CommonModule],
  templateUrl: './ngoninit.component.html'
})
// N'oubliez pas d'ajouter "implements OnInit"
export class NgOnInitComponent implements OnInit {
  users: any[] = [];
  loading = true; // Indicateur pour le spinner

  // 1. Le constructeur sert à injecter le service HTTP
  constructor(private http: HttpClient) {}

  // 2. ngOnInit se déclenche automatiquement au lancement du composant
  ngOnInit() {
    this.fetchUsers();
  }

  // 3. Notre méthode pour faire l'appel à l'API
  fetchUsers() {
    this.http.get<any[]>('https://jsonplaceholder.typicode.com/users').subscribe({
      next: (data) => {
        this.users = data;     // On stocke les données
        this.loading = false;  // On cache le spinner
      },
      error: (error) => {
        console.error('Erreur :', error);
        this.loading = false;
      }
    });
  }
}