Depuis les dernières versions, la prise en charge d’Ivy, le moteur de compilation et de rendu de nouvelle génération, était déjà assurée par Angular en même temps que la prise en charge du moteur View Engine. Cette fois, Angular 13 finalise la prise en charge de la bibliothèque Ivy et supprime celle de View Engine. La dernière version du framework bénéficie également de mises à jour de performance qui ont un impact sur des domaines comme les polices Adobe et le bundler JavaScript ESBuild, ESBuild prenant désormais en charge les plans de source CSS, ce qui permet d'optimiser le CSS global.

Parmi les changements mentionnés dans les notes de version d'Angular 13, il y a plusieurs évolutions. 

- L’ajout de la prise en charge de TypeScript 4.4. Á noter aussi que depuis le 5 octobre, les versions antérieures à TypeScript 4.4.2 ne sont plus prises en charge dans le noyau.

- La prise en charge de la bibliothèque de programmation réactive rxjs (Reactive Extensions for JavaScript) v7.

- La possibilité de désactiver ou d’activer dynamiquement les validateurs intégrés tels que min, max et minLength.

- Une API ViewContainerRef.createComponent simplifiée qui permet la création dynamique de composants.

- L’amélioration de la messagerie d'erreur.

- Des builds améliorées avec la capacité persistante « cache build by default ».

- L’introduction de l’Angular Package Format 13, qui supprime le code spécifique à View Engine des paquets.

- L’API $localize est stable pour l'internationalisation.

- La possibilité de définir des conditions personnalisées dans ng_package.

Des évolutions sur la navigation 

Parmi les autres changements dans Angular 13, certains sont liés à la navigation. 

- Le routeur ne remplace plus l'URL du navigateur quand la nouvelle navigation annule une navigation en cours, ce qui provoquait un scintillement des URL et permettait uniquement de prendre en charge certaines applications hybrides AngularJS. Les applications hybrides qui s'appuient sur navigationId sur le routeur doivent s'abonner aux événements NavigationCancel et effectuer elles-mêmes le replaceState pour ajouter navigationId à l'état du routeur.

- La classe wrappedValue n'est plus prise en charge par @angular/core, ce qui peut entraîner des erreurs de compilation ou des échecs au moment de l'exécution au cas où des bibliothèques utilisent wrappedValue. L'utilisation de wrappedValue doit être supprimée.

- Le comportement du SpyLocation utilisé par le RouterTestingModule a été modifié pour correspondre au comportement des navigateurs.

- Pour le noyau, des annotations pures sont ajoutées aux initialisateurs de propriétés statiques. Les propriétés de classe avec des initialisateurs qui provoquent l'exécution de code peuvent avoir des effets secondaires lors de l'évaluation du module, avec un effet similaire à celui du code au niveau du module. Ainsi, les optimiseurs ne peuvent pas supprimer en toute sécurité une classe avec une telle propriété statique, car les effets secondaires potentiels peuvent avoir un impact sur l'exécution de l'application. Pour permettre aux classes possédant ce type de propriétés statiques d'être optimisées et supprimées si elles ne sont pas utilisées, les expressions d'initialisation des propriétés statiques peuvent être annotées comme étant pures.

- Le cache du Service Worker est effacé dans le Safety Worker pour garantir que les contenus périmés ou cassés ne sont pas servis dans les futures demandes.

- Pour angular/platform-browser, le message d'erreur a été amélioré avec un déclencheur d'animation manquant.

- Angular 13 comporte un nouveau type de formulaires appelé FormControlStatus, qui réunit toutes les chaînes d'état possibles pour les contrôles de formulaire. De plus, AbstractControl.status a été réduit de la chaîne en FormControlStatus et StatusChanges a été réduit de Observable en Observable. La plupart des applications devraient consommer ces nouveaux types de manière transparente, selon le changelog officiel d'Angular.

- Pour le routeur, un changement a été proposé pour corriger une situation dans laquelle le sérialiseur d'URL par défaut laissait tomber tout ce qui suivait, y compris un point d'interrogation dans les paramètres de requête, ce qui entraînait une analyse syntaxique incorrecte pour une navigation vers /path?q=hello?&other=123. Cette modification permet une analyse correcte.

- Le support d'IE11 (Internet Explorer) a été supprimé.

Des modifications sur le compilateur

Enfin, dans la longue liste des changements, le compilateur subit quelques ajustements.

- Pour le compilateur-cli, une correction a été proposée pour utiliser le contexte de résolution de module correct pour les importations absolues dans les fichiers d.ts.

- Toujours à propos du compilateur-cli, celui-ci n’effectuera pas l'analyse des fichiers sans comportement Angular dans les builds incrémentales. Dans une build incrémentale, le compilateur essaie de réutiliser autant de données d'analyse que possible d'une compilation précédente pour éviter de refaire le même travail d'analyse. Cependant, pour les fichiers sources sans comportement Angular, aucune donnée d'analyse n’est enregistrée, avec pour résultat que le fichier source est ré-analysé à chaque compilation, même si rien n'a changé. Ce commit évite l'analyse de tels fichiers sources.

- Pour Angular Language Service, un support sera offert pour l'autocomplétion des types d'union de chaînes littérales dans les modèles.

- Pour le routeur, les événements de sortie manquants seront ajoutés à RouterOutletContract. Cet ajout sera nécessaire plus tard quand les composants seront rendus dynamiquement via la technologie Module Federation.

La livraison d’une version de production du langage est programmée tous les six mois. La version précédente, Angular 12 a été livrée le 12 mai. La version de production d’Angular 13 est prévue pour le 3 novembre. Le code de cette release candidate est disponible sur GitHub.