Skip to content

Observable expliqué simplement

Vous souhaitez recevoir de l'aide sur ce sujet ? rejoignez la communauté Angular.fr sur Discord.

Angular 21.2 : une mise à jour discrète… mais stratégique

Angular 21.2 est une version mineure, mais elle confirme très clairement la direction prise par le framework : plus de typage, plus d’expressivité dans les templates, et une transition progressive vers un modèle réactif plus optimisé.

Voici un tour complet des nouveautés importantes.


Support officiel de TypeScript 6

Angular 21.2 ajoute le support de TypeScript 6.

Ce n’est pas juste une mise à jour cosmétique. Angular dépend fortement du système de types pour analyser les templates. Chaque évolution de TypeScript améliore :

  • la précision des diagnostics
  • la détection d’erreurs dans les templates
  • la qualité de l’autocomplétion dans les IDE
  • la cohérence entre le code TS et le template

Pour les équipes qui suivent de près l’évolution du langage, c’est un vrai signal de modernité.

Templates plus expressifs

instanceof dans les templates

Il est désormais possible d’utiliser instanceof directement dans les expressions Angular.

Exemple :

html
@if (value instanceof AdminUser) {
  <div>
    Accès administrateur
  </div>
}

Cela permet :

  • un typage plus précis dans le template
  • un narrowing correct par TypeScript
  • moins de logique déplacée artificiellement dans le composant

Arrow functions dans les templates

Les fonctions fléchées sont maintenant autorisées dans les expressions.

Exemple :

html
<button (click)="items.update(list => [...list, newItem])">
  Ajouter
</button>

Avant, il fallait souvent créer une méthode dédiée dans le composant juste pour ce type d’opération.

Résultat :

  • moins de boilerplate
  • des interactions plus naturelles avec les Signals
  • une syntaxe plus proche du TypeScript moderne

À utiliser avec modération, évidemment, pour garder des templates lisibles.

ChangeDetectionStrategy.Eager : un alias révélateur

Angular 21.2 introduit :

ts
ChangeDetectionStrategy.Eager

Cet alias est strictement équivalent à Default.

Donc aujourd’hui :

ts
changeDetection: ChangeDetectionStrategy.Default

et

ts
changeDetection: ChangeDetectionStrategy.Eager

ont exactement le même comportement.

Pourquoi ce renommage ?

Le mot Default décrit une position. Le mot Eager décrit un comportement.

Ce changement prépare clairement le terrain pour un futur où :

  • OnPush pourrait devenir la stratégie par défaut
  • la détection serait plus optimisée
  • les Signals piloteraient plus finement les mises à jour

Renommer Default en Eager permet de dissocier le comportement actuel de la notion de “valeur par défaut”.

C’est un petit changement… mais stratégiquement très parlant.

ResourceSnapshots : composer l’asynchrone proprement

Angular avait introduit les Resources, une API expérimentale pour encapsuler l’état asynchrone dans un modèle basé sur les Signals.

Une Resource contient :

  • une valeur
  • un état de chargement
  • une erreur éventuelle

Le problème classique

Si tu as plusieurs appels asynchrones :

  • userResource
  • ordersResource

Tu te retrouves vite à gérer :

  • loadingUser
  • loadingOrders
  • errorUser
  • errorOrders

Bref, beaucoup de logique impérative.

Ce que 21.2 apporte

Les ResourceSnapshots permettent de capturer l’état complet d’une Resource à un instant donné, puis de les composer proprement.

Concrètement :

  • si l’une des ressources charge → état global en loading
  • si l’une échoue → état global en erreur
  • si tout est prêt → état combiné cohérent

Sans multiplier les flags.

L’objectif est clair : rendre la gestion de l’asynchrone aussi déclarative que les computed() pour le synchrone.

Signal Forms : des améliorations concrètes

Les Signal Forms continuent d’évoluer en 21.2.

Meilleure gestion des erreurs de parsing

Les champs comme :

html
<input type="number">

peuvent produire des états intermédiaires invalides pendant la saisie.

Exemple :

  • -
  • 1.
  • valeur partiellement valide

Angular 21.2 améliore la distinction entre :

  • erreur de parsing
  • erreur de validation métier
  • état intermédiaire pendant la saisie

Cela évite des comportements trop agressifs côté validation.

Support propre de null pour les champs numériques

Il est désormais possible de lier proprement null à un champ type="number".

Cela simplifie les champs optionnels et évite :

  • conversions implicites vers 0
  • apparition de NaN
  • incohérences entre modèle et vue

Options de focus

Les Signal Forms permettent maintenant de mieux gérer le focus des champs.

Cas typiques :

  • focus automatique sur le premier champ invalide à la soumission
  • contrôle plus fin du comportement UX

Moins de manipulation manuelle du DOM, moins de ViewChild juste pour déplacer le curseur.

Interop avec les Reactive Forms

L’introduction de SignalFormControl facilite l’interopérabilité avec les Reactive Forms classiques.

Cela permet :

  • une migration progressive
  • un usage hybride
  • moins de refactor massif