Angular 18 vient de sortir ! Nouveautés et améliorations
Nous sommes le 23 mai 2024 et un tournant dans angular est arrivé !
Oui, vous mâavez bien lu, un tournant !
zoneless avait annoncĂ© comme but, et ça yest, câest officiel !
DĂ©couvrons ensemble les nouveautĂ©s dâangular 18 !
Zoneless dans angular 18
Zoneless, câest un comportement prĂ©vu depuis de nombreuses annĂ©es, qui a mis du temps Ă ar.
Avant mĂȘme cette Ă©tape, nous pouvions nous passer de zonejs, dans le main.ts, avec le ânoopâ mais ⊠tout nâĂ©tait pas prĂ©vu pour ça.
A base de ChangeDetectorRef, dâApplicationRef, ou tout simplement (sans passer par le ânoopâ du main.ts pour la zone), nous pouvions dĂ©jĂ utiliser la stratĂ©gie OnPush.
OK, câĂ©tait une premiĂšre belle idĂ©e mais ⊠en angular 16 est arrivĂ© un petit nouveau dans angular/core : signal. Et ça y est, nous avions un avant et un aprĂšs.
Les signaux ont été créés spécifiquement pour ça : laisser le composant / le service prévenir un template du changement / de la notification !
Ainsi, plus besoin de zone.js pour tout dĂ©tecter en background, trop souvent, avec des hypothĂšses de mise Ă jour qui pouvaient ĂȘtre erronĂ©es, ..
Paramétrage
On ajoute le provideExperimentalZonelessChangeDetection()

Et on supprime zone.js, dâangular.jon

Mise Ă jour du template
Le template va ĂȘtre mise Ă jour suivant les cas suivant :
- markForCheck (automatiquement mis grĂące Ă lâAsyncPipe par exemple)
- setInput du composant
- .set sur un signal abonné sur la vue
- Sâattacher Ă une view marquĂ©e en dirty
Coalescing par défaut
Pour rĂ©duire le nombre de cycles de dĂ©tection de changement, on peut regrouper certains Ă©vĂ©nements, câest le coalescing.
Attention, ne pas le mettre par défaut dans les anciennes applications, sous peine de voir apparaßtre des bugs / régressions !

Exemple

avec le coalescing Ă false, nous avons ceci dans la console (regardez les trigger).

Câest Ă cause du bubble event.
Avec le coalescing dâangular 18 par dĂ©faut Ă true, nous avons maintenant :

Moins de détection de changement de déclenchées !
defer est stable !
@defer Ă©tait apparu dans la version angular 17. Et câĂ©tait un moyen extra-ordinaire pour diminuer la taille du bundle ! Les composants appelĂ©s dans @defer sont en lazy ! donc leur bundle sont sur le serveur, au dĂ©marrage de lâapplication !
Vous pouvez diminuer drastiquement la taille du bundle initial ! CouplĂ© au lazy loading ⊠câest tellement puissant! â€
Le support natif avec zoneless de lâasync await !
Avant la version 18 dâangular, et le zoneless, zoneless ne pouvait pas tracker le async await, et la cli Ă©tait obligĂ© de redescendre Ă lâutilisation des Promise.
Maintenant, si on crée un projet en v18, avec la zone less, async/await est supporté nativement par la cli !
Ne fonctionne que si zone.js est exclu de polyfill du fichier angular.json.
Material 3 est disponible

Rendez-vous sur https://material.angular.io/
La signal API en cours de dev
signal, computed, effect, untracked, tout ça câest stable.
Mais, en 17.2 et 17.3 sont apparus : input, input.required, output, viewchild, model, qui font dire âau revoirâ aux directives @Input, @Ouput, âŠ
Tout nâest pas encore stable, attendons quelques versions mineures !
Et aussi
ng â version pour la CLI
ng version existe toujours, mais ça nous liste tout.
Si on veut juste la version : ng --version nous donne la version en cours.
ajout de ng dev
alias de ng serve. ng dev est sans plus facile Ă lire.
Migration de vite vers le nouveau moteur de package systĂšme
Seule la partie dev-server de Vitejs a été déplacée.
Suppression de ng doc
Peu voire pas du tout utilisĂ©, (et pourtant, couplĂ©e avec compodoc, câĂ©tait vraiment pratique), ils-elles ont dĂ©cidĂ© de lâenlever.
Pas de génération du fichier index.hml en SSR
Plus de génération de ce fichier. A la place, un fichier index.csr.html (index.server.html) est émis.
Tout ceci pour éviter des problÚmes de reconnaissance du fichier index.hml par les servers / les providers cloud.
On peut redemander de générer le fichier index.hml, avec le paramétrage : index.
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/my-app",
"index": {
"input": "src/index.html",
"output": "index.html"
}
}
}
}
Et la suite ?
rxjs optionel
Angular nous annonce que rxjs va devenir de plus en optionel dans le coeur dâangular pour les prochaines versions !
Ca aussi, ça amÚne du changement !
Une déclaration standalone simplifiée
La dĂ©claration et lâappel seront simplifiĂ©es :
- plus besoin de mettre standalone à true, ça sera par défaut
- plus besoin de mettre le composant dans la balise import ! il sera reconnu directement depuis le template !
A trĂšs vite chez devtobecurious pour dâautres news (dotnet 9 arrive dans quelques mois ⊠:D)
Et dâici lĂ , stay curious !
Company
About
Press
Blog
Career
Service
Home
Best place
What to do
Travelers
Terms
Privacy
Condition
FAQ
Blog
Terms
Privacy
Condition
FAQ
Blog
All right reserved by visual composer