Toutes les nouveautĂ©s d'Angular 18 đ
Angular 18 vient de sortir. Quelles sont les nouveautés apportées par cette version majeure ? Découvrons les !
Au sommaire :
- Breaking change : le compilateur dâAngular nĂ©cessite Typescript 5.4
- Les opĂ©rateurs de flux et defer sont dĂ©sormais âstableâ
- Valeurs par défaut lors de la projection de contenu
- Route.redirectTo peut dĂ©sormais ĂȘtre une fonction
- Un router guard peut retourner un RedirectCommand
- Changement de détection sans zone.js (expérimental)
- Changements dâĂ©tats des contrĂŽles de formulaires
- Dépréciation de HttpClientModule
- Angular.dev devient le site de documentation officiel
- Sources et liens
Breaking change : le compilateur dâAngular nĂ©cessite Typescript 5.4
Le âcompilerâ dâAngular 18 (@angular/compiler-cli
) nécessite désormais la version 5.4 de Typescript. Cela pourrait
poser quelques soucis lors de la mise à jour si vous avez des packages qui nécessitent une version inférieure.
Typescript étant connu pour éviter à tout prix les breaking changes, cela ne devrait en réalité pas poser de problÚmes
lors de lâĂ©xĂ©cution de votre projet, mais il faudra probablement ignorer et/ou fixer quelques erreurs lors de votre
npm update
!
Les opĂ©rateurs de flux et defer sont dĂ©sormais âstablesâ
Si vous non plus vous ne pouvez plus Ă©crire un template sans @if
, @for
, @defer
et consorts : bonne nouvelle.
Ces opĂ©rateurs Ă©taient en âdĂ©veloppeur previewâ avec Angular 17, leur API est dĂ©sormais âstableâ avec Angular 18 !
Valeurs par défaut lors de la projection de contenu
La projection de contenu est une mĂ©canique permettant de rĂ©cupĂ©rer ce qui est placĂ© entre les balises HTML dâun composant afin de lâafficher oĂč on le souhaite dans le-dit composant.
Prenons lâexemple dâune carte PokĂ©mon. Je souhaite avoir un composant <pokemon-card>...</pokemon-card>
auquel je
veux fournir du contenu HTML pour afficher le nom de la carte, son coût, une image, une description et une éventuelle
citation ou crĂ©dit en bas de carte. Si lâune de ces informations nâest pas fournie, il serait intĂ©ressant dâavoir un
contenu affiché par défaut.
Avant Angular 18
Auparavant si vous ajoutiez du contenu dans un <ng-content>
vous obteniez une erreur, par exemple :
Vous obtenez lâerreur suivante :
â [ERROR] NG5002: <ng-content> element cannot have content. [plugin angular-compiler]
src/main.ts:16:6:
23 â <ng-content>Contenu par dĂ©faut ?</ng-content>
â” ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
En rĂ©alitĂ©, il y a des façons dây arriver, par exemple Ă lâaide dâun @ContentChild().
Ă partir dâAngular 18
Ă partir dâAngular 18, le code ci-dessus est fonctionnel et la valeur passĂ©e dans la balise <ng-content>
sera affichée
si aucun contenu nâest fourni dans les balises du composant.
Aucun contenu nâest fourni au composant PokemonCard
, donc âContenu par dĂ©fautâ sera affichĂ©.
Affichera : Eclair : lance une attaque Ă©lectrique sur son adversaire.
Et enfinâŠ
⊠nâaffichera rien (nâaffichera pas le contenu par dĂ©faut) ! Et oui car mĂȘme sâil est vide, du contenu est fourni au composant.
Route.redirectTo peut dĂ©sormais ĂȘtre une fonction
La fonction de redirection prend en paramĂštre un ActivatedRouteSnapshot
et doit retourner lâURL sous forme de chaĂźne
de caractĂšres ou un UrlTree
.
Un router guard peut retourner un RedirectCommand
Afin dâeffectuer une redirection dans un guard, il est maintenant possible de retourner un object de type
RedirectCommand
, prenant Ă la construction un UrlTree
:
Les options, passées en second paramÚtre du constructeur, sont un objet de type NavigationBehaviorOptions.
Documentation de RedirectCommand
.
Expérimental : changement de détection sans zone.js
Si vous avez mĂȘme peu dâexpĂ©rience avec Angular, il y a de fortes chances que vous soyez dĂ©jĂ tombĂ© sur une erreur
incompréhensible provenant de zone.js
. Pour simplifier un peu, ce vendor est chargé de rapporter tous les changements
et Ă©vĂ©nements dâune âzoneâ donnĂ©e (en gĂ©nĂ©ral, la zone est votre page web). Angular sâen servait donc pour effectuer
la détection de changement.
Avec des travaux rĂ©alisĂ©s depuis quelques annĂ©es et lâarrivĂ©e des signaux, il est dĂ©sormais possible de dâutiliser
Angular sans zone.js
. Pour cela, il faut appeler provideExperimentalZonelessChangeDetection()
lors du démarrage de
lâapplication (bootstrap) :
Vous pouvez désormais retirer zone.js
du fichier angular.json
. Le retrait de zone.js
permet notamment :
- dâaccĂ©lĂ©rer le rendu initial de lâapplication
- rĂ©duire le poids global de lâapplication
- avoir plus de contrÎle sur la détection de changement avec la stratégie
OnPush
etChangeDetectorRef.markForCheck
- combiner des micro-frontends plus facilement (ils ne sont plus dans des zones différentes)
- Ă©viter dâavoir des erreurs incomprĂ©hensibles :)
La migration sera plus facile si vos composants ont déjà la stratégie de détection de changement OnPush
. Alors si ce
nâest pas le cas, je vous suggĂšre de les convertir au plus vite !
Changements dâĂ©tats des contrĂŽles de formulaires
Une nouvelle propriété est disponible sur FormControl
, FormGroup
et FormArray
: events
.
Il sâagit dâun observable permettant dâĂȘtre informĂ© sur les diffĂ©rents changements dâĂ©tats : valeur, touch
,
pristine
et son Ă©tat de validation. Son utilisation est trĂšs simple :
Dépréciation de HttpClientModule
Importer HttpClientModule
dans un module ou composant est désormais déprécié. Il faut utiliser la fonction
provideHttpClient()
dans vos providers. Par exemple :
Si vous utilisez la commande ng update @angular/core
(ou Nx) pour mettre votre projet Ă jour, ce
changement devrait ĂȘtre effectuĂ© automatiquement !
Consultez la documentation pour plus dâinformations.
Angular.dev devient le site de documentation officiel
Le site, dĂ©jĂ disponible depuis quelques mois, vient officiellement remplacer Angular.io. Ce dernier reste disponible pour lâinstant (dâautant quâil est souvent mieux rĂ©fĂ©rencĂ© sur Google) mais devrait prochainement rediriger sur la nouvelle plateforme.
Angular.dev propose de la documentation et des tutoriels interactifs (avec du live coding) ainsi quâun playground bien pratique.
Sources et liens
Nous avons vu les changements les plus importants de cette nouvelle version, mais il y en a dâautres comme des amĂ©liorations du SSR et de lâhydratation de la page. Pour plus dâinformations sur ces Ă©lĂ©ments ou un angle diffĂ©rent sur ceux Ă©voquĂ©s dans cet article, nâhĂ©sitez pas Ă consulter les liens suivants :