Aller au contenu

Control Flow

Le Control Flow, c’est le fait de contrĂŽler dynamiquement l’affichage des Ă©lĂ©ments de nos templates.

Conditionner avec @if

@if permet d’afficher ou non un Ă©lĂ©ment en fonction d’une condition.

Par exemple, imaginons ce header :

<header>
  <h1>Mon site</h1>
  <button>Se connecter</button>
  <button>Mon compte</button>
</header>

Ici, cela n’a pas de sens d’avoir le bouton de connexion et le bouton “mon compte” en mĂȘme temps. On va donc conditionner leur affichage en fonction de l’état de l’utilisateur.

<header>
  <h1>Mon site</h1>
  @if (!isConnected) {
  <button>Se connecter</button>
  } @else {
  <button>Mon compte</button>
  }
</header>

GrĂące Ă  @if, j’affiche le bouton “Se connecter” si l’utilisateur n’est pas connectĂ© et le bouton “Mon compte” si l’utilisateur est connectĂ©.

Boucler avec @for

@for permet de boucler sur un Iterable (le plus souvent un tableau) pour afficher une liste d’élĂ©ments.

Par exemple, imaginons une liste de tĂąches :

export class TasksComponent {
  tasks: Task[] = [
    {
      id: 1,
      title: "Apprendre Angular",
      done: true,
    },
    {
      id: 2,
      title: "Rejoindre le Discord de Bonjour Angular",
      done: true,
    },
    {
      id: 3,
      title: "Centrer une div",
      done: false,
    },
  ];
}

On peut alors afficher la liste des tĂąches :

<ul>
  @for (task of tasks; track task.id) {
  <li>{{ task.title }}</li>
  } @empty {
  <li>Aucune tĂąche</li>
  }
</ul>

Switcher avec @switch

@switch permet d’afficher un Ă©lĂ©ment en fonction d’une valeur.

Par exemple, imaginons un composant UserComponent qui affiche un utilisateur :

export class UserComponent {
  user: User = {
    id: 1,
    role: "teacher",
  };
}

On peut alors afficher l’ñge de l’utilisateur en fonction de sa valeur :

<p>
  @switch (user.role) { @case('student') {
  <span>Vous ĂȘtes un.e Ă©tudiant.e</span>
  } @case('teacher') {
  <span>Vous ĂȘtes un.e enseignant.e</span>
  } @case('director') {
  <span>Vous ĂȘtes un.e directeur.rice</span>
  } @default {
  <span>Vous ĂȘtes un.e inconnu.e</span>
  } }
</p>