Angular 17 « Control flow » : Nouvelle syntaxe de contrôle de flux
Angular 17 a introduit une nouvelle identité visuelle, un nouveau site web angular.dev, ainsi que de nombreuses autres fonctionnalités.
Aujourd’hui, concentrons-nous sur les nouvelles syntaxes de contrôle de flux disponibles dans les templates HTML d’Angular.
Nouvelle syntaxe “If — then — else”
La directive ngIf et sa syntaxe else étaient souvent source de confusion :
<div *ngIf="condition; else alternateContent">
Contenu affiché lorsque la condition est vraie.
</div>
<ng-template #alternateContent>
Contenu affiché lorsque la condition est fausse.
</ng-template>
Angular 17 introduit une syntaxe plus propre et lisible :
<div>
@if (condition) {
Contenu affiché lorsque la condition est vraie.
} @else {
Contenu affiché lorsque la condition est fausse.
}
</div>
Cette syntaxe est plus concise et lisible. De plus, elle prend en charge l’option else if :
@if (a > b) {
{{a}} est supérieur à {{b}}
} @else if (b > a) {
{{a}} est inférieur à {{b}}
} @else {
{{a}} est égal à {{b}}
}
Nouvelle syntaxe de boucle “for”
La directive ngFor peut être remplacée par une syntaxe similaire :
@for (element of elements; track element.id) {
{{ element.name }}
}
Le paramètre « track » est obligatoire, mais contrairement à trackBy de ngFor , il utilise une propriété de l’objet plutôt qu’une fonction.
Les variables contextuelles de ngFor sont toujours disponibles, permettant d’obtenir l’index ou d’autres informations sur l’élément :
@for (element of elements; track element.id; let idx = $index, e = $even) {
Élément #{{ idx }} : {{ element.name }}
}
Une nouveauté est la possibilité de définir un template alternatif si le tableau est vide grâce au bloc @empty :
@for (element of elements; track element.name) {
<li> {{ element.name }} </li>
} @empty {
<li> Aucun élément disponible. </li>
}
Nouvelle syntaxe “switch — case”
La directive ngSwitch et sa syntaxe compliquée peuvent désormais être remplacées par une version plus simple :
<div [ngSwitch]="currentView">
<p *ngSwitchCase="'home'">Affichage de la page d'accueil</p>
<p *ngSwitchCase="'about'">Affichage de la page À propos</p>
<p *ngSwitchCase="'contact'">Affichage de la page Contact</p>
<p *ngSwitchDefault>Page non sélectionnée</p>
</div>
Avec Angular 17, voici la nouvelle syntaxe :
@switch (currentView) {
@case ('home') {
<p>Affichage de la page d'accueil</p>
}
@case ('about') {
<p>Affichage de la page À propos</p>
}
@default {
<p>Page non sélectionnée</p>
}
}
À retenir
Malgré ces nouvelles syntaxes disponibles avec Angular 17, il est important de noter que :
- Les directives héritées comme ngIf, ngFor, et ngSwitch ne sont pas dépréciées et resteront disponibles.
- Vous pouvez utiliser les deux syntaxes dans votre application Angular 17+ si vous le souhaitez.
- Une commande de migration automatique via Angular CLI est disponible pour remplacer la syntaxe héritée :
ng g @angular/core:control-flow
. - Au-delà de la syntaxe, l’équipe Angular a constaté jusqu’à 90 % d’amélioration des performances avec la nouvelle syntaxe et une amélioration moyenne de 30 % sur le dépôt Angular Material.
Ce n’est qu’un aperçu des nouveautés d’Angular 17. Restez à l’écoute pour plus de détails sur les autres fonctionnalités.