Angular 16 vs Angular 18 comparison: discover what's new in Angular, the arrival of signals, Zoneless mode, zone coalescing, and their impact on your projects.
Angular 18 : nouvelles fonctionnalités d'Angular qui posent les bases pour l'avenir
Le framework Angular continue d'évoluer, chaque nouvelle version apportant son lot d'innovations. Sortie en mai 2024, Angular 18 est une version charnière qui ouvre la voie à de profonds changements futurs du framework. Dans cet article, nous allons explorer les nouvelles fonctionnalités d'Angular 18, comprendre leur impact sur les développeurs et voir pourquoi cette version est une étape clé avant les développements d'Angular 19 et 20.
Traditionnellement, Angular utilise Zone.js pour détecter les changements et actualiser l'interface utilisateur. Avec Angular 18, un premier pas a été franchi vers un Angular sans Zone.js.
En mode Zoneless, vous devez déclencher manuellement la détection des changements, ce qui vous donne plus de contrôle et améliore les performances dans les applications complexes.
Example en mode Zoneless:
import { ApplicationRef, Component, effect, signal } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2>Compteur : {{ count() }}</h2>
<button (click)="increment()">Incrémenter</button>
`
})
export class AppComponent {
count = signal(0);
constructor(private appRef: ApplicationRef) {
effect(() => {
console.log('Nouvelle valeur :', this.count());
});
}
increment() {
this.count.update(v => v + 1);
this.appRef.tick();
}
}
Ce code montre un compteur basé sur les signals d’Angular 18. Le count
stocke l’état, un effect
chaque changement, et la méthode increment()
met à jour la valeur. Comme le mode zoneless est utilisé, la détection de changements doit être déclenchée manuellement avec this.appRef.tick()
offrant plus de contrôle et de performance.
Angular 18 active par défaut zone coalescing , une optimisation qui regroupe plusieurs événements de changement en un seul cycle de détection.
Résultat : moins de cycles de détection, donc meilleures performances.
Les développeurs bénéficient de cette amélioration sans avoir à modifier leur code.
@Component({
selector: 'app-form',
template: `
<input [(ngmodel)]="firstName" placeholder="Prénom" />
<input [(ngmodel)]="lastName" placeholder="Nom" />
<p>Nom complet : {{ firstName }} {{ lastName }}</p>
`
})
export class FormComponent {
firstName = '';
lastName = '';
}
Ce composant définit un formulaire simple avec deux champs liés à firstName et lastName à l'aide d'une liaison bidirectionnelle (ngModel). Chaque fois qu'une entrée est effectuée, Angular met automatiquement à jour les propriétés du composant et affiche à nouveau la valeur complète dans le paragraphe. Avec Angular 18, la fusion de zones, qui est activée par défaut, regroupe ces mises à jour, rendant le rendu plus fluide et plus efficace.
Le Router Angular évolue aussi avec Angular 18. L’objectif : rendre la navigation encore plus fiable et plus flexible. Parmi les améliorations, on retrouve une gestion plus fine des guards et une meilleure prise en charge de la route pre-activation.
Le Router Angular s’est enrichi dans Angular 18 :
meilleure gestion des guards
pré-activation plus flexible
base plus solide pour SSR et hydratation à venir
Exemple avec un guard simple :
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
canActivate(): boolean {
return !!localStorage.getItem('token');
}
}
// app-routing.module.ts
const routes: Routes = [
{ path: 'dashboard', component: DashboardComponent, canActivate: [AuthGuard] }
];
Cet exemple montre un guard Angular utilisé pour sécuriser une route. La classe AuthGuard
implémente CanActivate
et vérifie si un token est présent dans le localStorage
. Si oui, la navigation est autorisée, sinon elle est bloquée. Dans le fichier de routing, la route /dashboard
st protégée par ce guard, ce qui signifie que seuls les utilisateurs authentifiés peuvent y accéder. C’est une pratique courante pour gérer la sécurité et l’accès conditionnel dans une application Angular.
await
en mode ZonelessAvec Angular 18, il devient possible d’utiliser await
directement dans les templates lorsque l’application tourne en mode Zoneless.
Cela simplifie l’écriture du code asynchrone.
Example: charger des données depuis une API et les afficher sans boilerplate supplémentaire. loading data from an API and displaying it without extra boilerplate.
@Component({
selector: 'app-user',
template: `
<ng-container *ngif="userPromise | async as user; else loading">
<h3>{{ user.name }}</h3>
<p>{{ user.email }}</p>
</ng-container>
<ng-template #loading>Chargement...</ng-template>
`
})
export class UserComponent {
userPromise = this.fetchUser();
async fetchUser() {
const response = await fetch('https://jsonplaceholder.typicode.com/users/1');
return response.json();
}
}
Ce composant illustre la gestion de données asynchrones avec Angular. La méthode fetchUser()
écupère un utilisateur depuis une API externe et retourne une promesse. Dans le template, le pipe async
est utilisé pour attendre la résolution de cette promesse : si les données sont disponibles, elles sont affichées name
et email
; sinon Angular montre le template loading
. Cela permet d’écrire un code clair et réactif sans gérer manuellement les abonnements.
Angular 18 n’est pas une version révolutionnaire, mais elle marque un tournant stratégique.En introduisant le mode Zoneless en preview, en améliorant la gestion du Router, et en renforçant la vérification des templates, cette version jette les bases des grandes avancées confirmées par Angular 19 et surtout Angular 20.
Pour les développeurs, Angular 18 est une version de préparation ::
Elle offre déjà de meilleures performances grâce au zone coalescing.
Elle introduit des concepts (Zoneless, await
dans les templates) qui deviendront la norme.
Elle permet de se familiariser avec l’évolution de la réactivité Angular, avant l’arrivée des signals stables en Angular 20.
En clair : si vous souhaitez rester à jour sur les nouveautés d’Angular et préparer vos applications au futur, Angular 18 est une étape à ne pas négliger.
Angular 16 vs Angular 18 comparison: discover what's new in Angular, the arrival of signals, Zoneless mode, zone coalescing, and their impact on your projects.
Discover the Angular Rome Conference: workshops, domain-driven design, signals, state management, micro frontends.
Discover Angular 18: zoneless mode, zone coalescing, native await, and TypeScript 5.4 compatibility.
Le TOP 3 des diagrammes de Gantt JavaScript. Découvrez leurs caractéristiques, avantages et inconvénients pour choisir le meilleur outil pour votre projet.
Découvrez comment ScheduleJS s'est intégré en toute transparence à Selligent CRM, améliorant ainsi l'efficacité de la planification pour les consultants d'une grande marque de produits de beauté.
Cet article présente l'intégration d'un composant ScheduleJS dans un tableau Ag-Grid externe, afin de démontrer la flexibilité de ScheduleJS.
Comment synchroniser plusieurs graphiques ? Apprenez à réutiliser votre ligne de temps ScheduleJS dans plusieurs graphiques afin de les synchroniser.
Comment construire un menu contextuel interactif ? Une plongée en profondeur dans la gestion des événements ScheduleJS et les pratiques recommandées pour construire votre propre menu contextuel.
Cet article montre comment mettre en œuvre un rendu dynamique en fonction du niveau de zoom actuel des graphiques.
Cet article propose une mise en œuvre pas à pas d'un mécanisme d'animation utilisant l'API JavaScript Date pour vos activités.