🚨 Angular 18 Is Out: Zoneless Upgrade (Step-By-Step)

Angular University
23 May 202414:35

Summary

TLDRLa vidéo présente la migration d'une application Angular 17 vers Angular 18 et l'introduction de Zoness, un nouveau système de détection des modifications. Elle démontre comment utiliser Zoness pour la détection des changements, comment résoudre les problèmes de détection avec des intervalles et les observables, et recommande l'utilisation de signaux pour une meilleure intégration. En outre, elle couvre les nouvelles fonctionnalités d'Angular 18, notamment la projection de contenu avec NG Content, l'observable de formulaires pour React Forms, la fonctionnalité de redirection basée sur des paramètres et la compatibilité d'Angular Material avec le rendu côté serveur.

Takeaways

  • 🚀 Angular 18 est maintenant disponible avec la première version de Zoness pour le changement de détection.
  • 🔄 La migration d'une application Angular 17 vers Angular 18 est expliquée étape par étape, y compris la transition vers Zoness.
  • 🔧 Pour vérifier l'utilisation de Zones, il faut rechercher la présence de l'objet global Zone.
  • 🛠️ La mise à niveau vers Angular 18 nécessite de modifier la configuration de l'application pour inclure la détection de changement Zoness expérimentale.
  • ❗ L'ajout de la détection de changement Zoness est actuellement marquée comme expérimentale et comporte des limitations connues.
  • 🔄 Après la mise à niveau, il est nécessaire de redémarrer l'Angular CLI pour que les modifications prennent effet.
  • 🔍 La vérification de la migration vers Zoness est possible en essayant d'afficher l'objet global Zone qui devrait être non défini.
  • 🔑 Les changements de détection standard et 'onPush' fonctionnent comme prévu avec Zoness après la migration.
  • 🔄 La gestion des changements de données déclenchés par des intervalles ou des timeouts nécessite une approche différente avec Zoness.
  • 📶 L'utilisation de 'ChangeDetectorRef' pour déclencher manuellement la détection de changement n'est pas recommandée avec Zoness.
  • 📶 La solution recommandée pour les mises à jour de données avec Zoness est l'utilisation de 'signals' qui sont plus pratiques et efficaces.
  • 🌐 D'autres fonctionnalités d'Angular 18 incluent la projection de contenu NG avec du contenu par défaut et l'ajout d'observables pour les formulaires réactifs.
  • 🔄 La possibilité de rediriger vers des routes en utilisant une fonction plutôt qu'une chaîne de caractères a été ajoutée à Angular 18.
  • 📦 Une nouvelle version d'Angular Material compatible avec le rendu côté serveur et l'hydratation côté client a été introduite avec Angular 18.

Q & A

  • Quel est le sujet principal de cette vidéo ?

    -La vidéo traite de la migration d'une application Angular 17 vers Angular 18 et de l'introduction de Zoness, une nouvelle fonctionnalité de détection des modifications.

  • Comment vérifier si une application utilise Zones ?

    -Pour vérifier si une application utilise Zones, il faut rechercher la présence de l'objet global 'Zone' dans le code.

  • Quels sont les trois scénarios de détection des modifications simples présentés dans la vidéo ?

    -Les trois scénarios sont un compteur simple, un compteur d'intervalle mis à jour via 'setInterval', et un compteur observable envoyé au modèle via une observable.

  • Quelle commande permet de migrer une application vers Angular 18 ?

    -La commande utilisée pour la migration n'est pas spécifiée dans le script, mais il est mentionné que le processus inclut une mise à jour de 'package.json' et l'utilisation de l'outil de construction de l'application.

  • Pourquoi faut-il redémarrer l'Angular CLI après avoir migré vers Angular 18 ?

    -Il est nécessaire de redémarrer l'Angular CLI pour que la nouvelle version d'angular.js soit appliquée à l'application.

  • Quel est le rôle du provider 'experimental-zoness-change-detection' dans la configuration de l'application ?

    -Le provider 'experimental-zoness-change-detection' active la détection des modifications avec Zoness, qui est en version expérimentale et peut avoir des limitations connues.

  • Comment Zoness différencie-t-elle la détection des modifications par rapport à Zones ?

    -Zoness détecte les modifications déclenchées par des gestionnaires d'événements liés dans le modèle Angular et informe Angular que des données ont changé, nécessitant une mise à jour de l'interface utilisateur.

  • Quel est le problème avec le compteur d'intervalle dans une application Zoness ?

    -Le compteur d'intervalle ne se met pas à jour dans l'interface utilisateur car Zoness ne sait pas que la valeur a changé, à moins que cela ne soit fait via une observable ou un autre mécanisme de signalisation.

  • Comment résoudre le problème du compteur d'intervalle dans Zoness ?

    -On peut utiliser 'ChangeDetectorRef' pour notifier Angular des modifications, mais une approche préférable est d'utiliser des signaux (signals) pour mettre à jour les données et les afficher dans le modèle.

  • Quelles sont les autres nouveautés d'Angular 18 abordées dans la vidéo ?

    -Les nouveautés incluent la possibilité de projeter du contenu par défaut avec NG content, un nouvel observable pour les événements de formulaires réactifs, l'utilisation de fonctions dans 'redirectTo' pour la configuration des routes, et une nouvelle version d'Angular Material compatible avec le rendu côté serveur.

Outlines

00:00

🚀 Migration vers Angular 18 et Zoness

Dans ce paragraphe, l'auteur présente la sortie d'Angular 18 et la migration de son application Angular 17 vers cette nouvelle version. Il explique comment activer Zoness, une nouvelle fonctionnalité de détection des changements, et compare le comportement entre une application utilisant Zones et une nouvelle application Angular 18 utilisant Zoness. L'auteur démontre comment vérifier l'utilisation de Zones, effectuer la mise à niveau vers Angular 18 et apporter les modifications nécessaires pour passer à Zoness. Il insiste sur l'importance de redémarrer le CLI Angular pour que les modifications prennent effet et conclut en montrant que l'application est désormais sans Zones, ce qui est confirmé par l'absence de l'objet global Zone.

05:01

🔍 Comportement de Zoness avec les différentes sources de changement

Ce paragraphe explore en détail le fonctionnement de Zoness avec les différentes sources de détection des changements, notamment les événements, les observables et les intervalles. L'auteur montre que les événements liés aux boutons et les observables fonctionnent correctement avec Zoness, car elles déclenchent automatiquement la détection des changements. Cependant, les intervalles ne sont pas détectés par Zoness, car ils n'informent pas Angular des changements. Pour résoudre ce problème, l'auteur suggère d'utiliser ChangeDetectorRef ou, de préférence, des signaux (signals) pour notifier Angular des changements. Il recommande d'éviter l'utilisation de ChangeDetectorRef à grande échelle et de privilégier les signaux pour une meilleure intégration avec Zoness.

10:03

🌟 Nouveaux fonctionnalités d'Angular 18

Dans ce paragraphe, l'auteur présente les nouvelles fonctionnalités d'Angular 18, en commençant par la nouvelle option de projection de contenu avec NG content, qui permet de définir un contenu par défaut pour les slots de projection de contenu. Ensuite, il aborde la nouvelle observable de formulaires pour les formulaires réactifs, qui permet de s'abonner à tous les événements survenant dans le formulaire. L'auteur montre également comment utiliser une fonction dans 'redirect' pour les routes, permettant de rediriger en fonction de paramètres spécifiques. Enfin, il mentionne la nouvelle version d'Angular Material compatible avec le rendu côté serveur et l'hydratation côté client, ainsi que la mise à jour de l'interface utilisateur des composants. L'auteur conclut en invitant les téléspectateurs à consulter ses cours sur le site Angular University pour une formation approfondie sur Angular.

Mindmap

Keywords

💡Angular 18

Angular 18 est la dernière version de la plateforme de développement web Angular, qui apporte de nouvelles fonctionnalités et des améliorations. Dans la vidéo, la migration d'une application Angular 17 vers Angular 18 est abordée, montrant comment cette mise à jour peut être effectuée et les changements apportés par cette nouvelle version.

💡Zones et Zoness

Les Zones sont un concept clé dans Angular pour gérer l'exécution de code asynchrone et la détection des modifications. Zoness est une version améliorée de Zones introduite dans Angular 18, qui offre une détection des modifications plus performante. La vidéo montre comment migrer une application utilisant Zones vers Zoness.

💡Détection des modifications (Change Detection)

La détection des modifications est le processus par lequel Angular identifie les changements dans les données et met à jour l'interface utilisateur en conséquence. La vidéo compare les comportements de détection des modifications entre une application basée sur Zones et une application Angular 18 utilisant Zoness.

💡Mise à jour (Upgrade)

La mise à jour d'une application vers une nouvelle version de son framework est une étape importante pour bénéficier des nouvelles fonctionnalités et des améliorations. Le script détaille le processus de mise à jour d'une application Angular 17 vers Angular 18.

💡Application Builder

L'Application Builder est une nouvelle fonctionnalité d'Angular 18 qui permet de construire des applications de manière plus efficace. Le script mentionne l'option d'utiliser l'Application Builder lors de la mise à jour vers Angular 18.

💡Définition de composants (Components)

Les composants sont les blocs de construction de base des applications Angular, représentant des portions de l'interface utilisateur. La vidéo aborde les modifications nécessaires pour les composants lors de la migration vers Zoness.

💡Observables

Les observables sont utilisés en programmation réactive pour représenter des flux de données qui peuvent changer au fil du temps. Dans le script, l'utilisation d'observables pour mettre à jour l'interface utilisateur est comparée entre les méthodes Zones et Zoness.

💡Change Detector Ref

Change Detector Ref est une référence utilisée pour contrôler manuellement le processus de détection des modifications dans Angular. La vidéo explique comment utiliser Change Detector Ref pour résoudre des problèmes de détection des modifications avec Zoness.

💡Signals

Les signaux sont une nouvelle façon de gérer les données asynchrones dans Angular, offrant une alternative à l'utilisation de Change Detector Ref. La vidéo recommande l'utilisation de signaux pour une meilleure intégration avec Zoness.

💡Migration

La migration est le processus de transfert d'une application d'une version ou d'un système à une autre. Le script fournit des étapes spécifiques pour migrer une application Angular 17 vers Angular 18 et vers l'utilisation de Zoness.

💡Angular Material

Angular Material est une bibliothèque de composants UI pour Angular qui suit les lignes directrices de Material Design. La vidéo mentionne une nouvelle version d'Angular Material compatible avec le rendu côté serveur et l'hydratation côté client, adaptée à Angular 18.

Highlights

Angular 18 est maintenant disponible avec la prise en charge initiale de Zoness.

Montre comment migrer une application Angular 17 vers Angular 18 et activer Zoness.

Comparaison du comportement entre une application basée sur Zones et une nouvelle application Angular 18 avec Zoness.

Présentation des astuces nécessaires pour la migration vers Zoness.

Couverture des nouvelles fonctionnalités disponibles dans Angular 18.

Mise à jour vers Angular 18 en utilisant une commande spécifique.

Modification de la configuration de l'application pour activer la détection de changement Zoness.

Suppression du polyfill Zone JS pour passer à Zoness.

Redémarrage du CLI Angular pour appliquer la nouvelle version d'Angular.js.

Vérification de la transition en Zoness en supprimant l'objet global Zone.

Explication du comportement de détection de changement avec Zoness pour les événements liés aux boutons.

Démonstration de la détection de changement automatique avec les observables et le pipe sync.

Problème de non-mise à jour de la counter d'intervalle sans utilisation du pipe sync.

Solution proposée pour notifier Angular des changements en dehors de Zoness en utilisant ChangeDetectorRef.

Recommandation d'utiliser les signaux pour une meilleure pratique avec Zoness.

Introduction de la nouvelle fonctionnalité de projection de contenu avec NG content.

Possibilité de définir un contenu par défaut pour les slots de NG content.

Présentation de la nouvelle observable de formulaires pour React Forms.

Abonnez-vous aux événements de formulaire pour réagir aux changements internes.

Nouvelle possibilité d'utiliser une fonction dans redirect-to pour les routes configurables.

Mise à jour d'Angular Material compatible avec le rendu côté serveur et l'hydratation côté client.

Lien vers les cours Angular University pour apprendre Angular en détail.

Appel à la réaction des téléspectateurs pour connaître leur avis sur la version Angular 18.

Transcripts

play00:00

angular 18 is out now and the support

play00:03

for zoness is available in its initial

play00:06

form in this video I'm going to show you

play00:08

how to take an angular 17 application

play00:10

and migrate it to angular 18 turn on

play00:14

zoness compare the difference of

play00:17

behavior between an application based on

play00:19

zones and a new zoness angular 18

play00:23

application show you the tricks that you

play00:25

need to know to migrate to zoness and

play00:28

I'm also going to cover all all the

play00:30

other extra features that are made

play00:32

available in angular

play00:34

[Music]

play00:38

18 welcome back to the angular

play00:40

University Channel I'm Vasco so as

play00:43

you're going to see migrating to zoness

play00:45

is way easier than it sounds let's take

play00:48

here this plain angular 17 application

play00:51

that is currently using zones and let's

play00:54

confirm that indeed it uses zones and

play00:57

after that we're going to migrate it to

play00:59

Zone L and angular 18 so to make sure

play01:02

that your application uses zones just

play01:04

check for the presence of the global

play01:06

Zone object as you can see this

play01:08

application is Zone based I'm not using

play01:11

here on push change detection I have

play01:14

created here free simple change

play01:16

detection scenarios a plain counter an

play01:20

interval counter that is being updated

play01:22

here via set interval and an observable

play01:26

counter that is being pushed to the

play01:28

template via an observable so if we

play01:31

check here the template we are printing

play01:32

out the plane counter the plane counter

play01:35

will increment when we click on this

play01:37

increment plane counter Button as you

play01:39

can see here the interval counter is

play01:42

going to be incremented every second as

play01:46

you can see here via set interval and

play01:49

finally the observable counter is being

play01:52

pushed to the template using the sync

play01:54

pipe so let's Now quickly migrate this

play01:57

to zoness and compare what happens in

play02:00

this free typical change detection

play02:03

scenarios in order to migrate to zoness

play02:06

First upgrade to angular 18 using the

play02:08

following command this is going to take

play02:10

a moment to process I will return When

play02:13

the installation is completed all right

play02:15

so a few updates were made in

play02:16

package.json and now we are being asked

play02:19

the question use the application Builder

play02:21

I'm going to hit space to say that yes I

play02:24

want to use it and this is going to run

play02:28

here a couple of migration

play02:30

and now this application is running on

play02:33

angular 18 to confirm this let's go

play02:36

ahead and let's hit NG serve and this is

play02:39

going to build the application that as

play02:42

we can see is now running here on

play02:45

angular 18 and everything is still

play02:47

working as before as expected because we

play02:51

are still using zones so just because

play02:54

you migrate to angular 18 does not mean

play02:57

that you are using zoness let's not now

play03:00

modify our application and turn it into

play03:02

a zoness application for that we need to

play03:05

do a couple of modifications so first

play03:08

let's go here to our application

play03:10

configuration and here in your providers

play03:13

you're going to add the following

play03:14

provider provide experimental zoness

play03:18

change detection now the zoness change

play03:20

detection is marked as experimental I'm

play03:23

going to talk about a bit the currently

play03:26

known limitations but I think that for a

play03:29

lot of applic ations this initial

play03:31

version of zoness will be more than

play03:34

enough the next step is to head over to

play03:37

angular do Json and here we are going to

play03:40

search for the Zone JS polyfill and

play03:43

we're going to go ahead and we're going

play03:45

to remove it now the last step and this

play03:48

is very important you need to stop your

play03:50

angular CLI and you need to run it again

play03:53

otherwise the new version of angular.js

play03:56

would not be applied to your application

play03:59

now let's confirm that this is indeed

play04:02

zoness I'm going to head over here to

play04:04

the console and let's try to print out

play04:07

just like we did before the global Zone

play04:09

object and this time around we have here

play04:12

zone is not defined so this application

play04:15

here is effectively zoness so let's have

play04:19

a look to see what happened you might

play04:22

have here the illusion that everything

play04:23

is still working like before that is not

play04:26

exactly the case so let's simplify this

play04:29

and let's go each use case at a time

play04:32

let's start here with the plane counter

play04:35

so as you can see when you increment the

play04:37

plane counter this is still working

play04:40

correctly as expected so what is

play04:42

happening here is that zoness detects

play04:44

that a click Handler is clicked on a

play04:47

button and that is going to trigger a

play04:50

change detection run so in that sense

play04:53

everything works like default change

play04:55

detection or on push this has always

play04:58

worked in all change detection modes all

play05:01

sorts of event handlers that are binded

play05:04

here in the angular template using the

play05:07

rounded parenthesis syntax will trigger

play05:10

change detection as usual also in zoness

play05:14

now let's have a look at the behavior

play05:16

here of our observable counter so I'm

play05:19

going to move this up and we are going

play05:21

to uncomment this and see the behavior

play05:24

so as you can see after application

play05:26

refresh the observable counter is still

play05:29

working correctly as expected so the

play05:32

fact that we are using the a sync pipe

play05:35

to push data to the template that is

play05:38

going to trigger zoness change detection

play05:41

or in other words it's going to inform

play05:44

angular that some data has changed in

play05:47

this component and this component has

play05:49

been marked as dirty and angular knows

play05:53

that it needs to update it all right so

play05:55

so far so good this pretty much works

play05:57

like default change detection and even

play05:59

on push this is standard behavior of

play06:01

angular now let's go ahead and let's

play06:04

carefully comment out this interval here

play06:08

to avoid having our application

play06:11

continuously triggered change detection

play06:13

due to this interval and let's inspect

play06:15

this interval counter separately all

play06:19

right so what is going on here so as you

play06:22

can see this interval counter even

play06:25

though it's currently being updated

play06:28

every second and incremented this is not

play06:32

getting reflected here in our template

play06:35

so because this interval counter is not

play06:38

being fed to the template using

play06:40

something like the sync pipe there is no

play06:43

way for zoness change detection to know

play06:46

that this counter is being changed the

play06:49

same thing would happen with set timeout

play06:52

for example there would also be no way

play06:56

for zoness change detection to know that

play07:00

a value has been changed in those

play07:02

circumstances as well so how could we

play07:05

fix this well we can head over here to

play07:08

our zoness application and we need to

play07:12

somehow here when we increment our

play07:15

counter we need to notify angular and

play07:17

inform it that a change has happened in

play07:20

the data of this component so I'm going

play07:22

to go ahead and I'm going to inject here

play07:25

the change detector ref and with it it

play07:30

we are going to go ahead and we're going

play07:32

to notify angular so I'm going to access

play07:36

here change detection ref and we're

play07:39

going to say here Mark for check and now

play07:42

this time around if we try this we're

play07:44

going to see that the counter is being

play07:47

correctly updated in the user interface

play07:49

as expected Now using change detector

play07:52

ref might sound like a clever trick but

play07:55

I don't recommend this approach I think

play07:57

that instead it's much better to use

play07:59

signals because it's really not that

play08:02

practical to use change detector ref

play08:04

everywhere in your application imagine

play08:06

that you have to call this after every

play08:09

HTTP call well you could put it in an

play08:11

Interceptor Etc but I'm going to show

play08:13

you what I think is a better way which

play08:16

is to instead use signals so let's go

play08:19

ahead and let's turn this interval

play08:22

counter into a signal let's provide it

play08:25

its initial value and here let's

play08:28

refactor this to update the signal so

play08:31

it's going to be counter equals counter

play08:34

+ one so now we have performed here the

play08:37

update of the counter and now don't

play08:39

forget head over here to the template

play08:43

and this is now a signal you have to

play08:46

invoke it otherwise this won't work as

play08:49

expected and this time around as

play08:51

expected without having to resort to

play08:54

change detector rev you have here the

play08:57

interval counter working correctly as

play08:59

expected and this is in general the

play09:02

recommended solution for working with

play09:04

zoness change detection which is to

play09:07

prefer to use signals so for example

play09:10

when you are doing an HTTP call and you

play09:13

want the data after the HTTP call to be

play09:15

reflected in the user interface push the

play09:18

data into a signal and consume that

play09:20

signal in your templates and everything

play09:23

will work perfectly and that was the

play09:26

main new feature of angular 18 zoness

play09:29

change detection in an initial version

play09:32

now let's with Rapid Fire cover the

play09:34

other features that you have available

play09:36

going on with NG content and angular

play09:40

content projection you now have default

play09:43

fallback content for your NG content

play09:46

slots so let me show you here an example

play09:49

I've created here a course card

play09:51

component that takes in here as a

play09:54

configurable NG content input a title in

play09:57

this case an H2 tag with the class title

play10:00

and we can see the course card printed

play10:03

out here to the screen now let's have a

play10:06

look here at the content we can see the

play10:09

component and we are using here NG

play10:11

content we are using here a Content

play10:13

projection slot we are currently

play10:16

checking here for an element in the

play10:19

content part with the class title and

play10:22

then we are projecting it here at this

play10:26

place in the template now one thing that

play10:28

we did not have so far was the

play10:30

possibility of defining here default

play10:34

content in case that we chose not to

play10:37

provide here any initial value for the

play10:41

title projection slot but now this is

play10:44

working so as you can see we now have

play10:47

default content available for NG content

play10:51

you might have noticed here this error

play10:52

message please disregard this it's just

play10:56

that webstorm is not fully up to date

play10:59

yet

play10:59

and you might be curious why does this

play11:02

look like Visual Studio code well I know

play11:05

that I'm going to get that question in

play11:07

the comments so I'm using the visual

play11:09

studio code dark modern theme so you get

play11:12

the best of both worlds you get webstorm

play11:15

with the beautiful vs code theme now

play11:19

let's go ahead and let's cover our next

play11:22

feature of angular 18 which is going to

play11:25

be the new forms observable for react

play11:29

forms so let's say that you have here a

play11:32

reactive form in your application you

play11:34

now have here this new events observable

play11:38

that you can subscribe to and this is

play11:40

going to report all the events that are

play11:44

happening in the form so let me show you

play11:46

here I'm going to open here another Tab

play11:50

and let me go ahead and let me load the

play11:53

application let's quickly use here the

play11:56

console and let me go ahead and let me

play11:59

open open here the form and from here

play12:03

I'm going to start creating here some

play12:07

events in the form we can see that

play12:08

already here some events occurred so

play12:11

such as for example when the value was

play12:13

initially set when the form became valid

play12:16

and now if I select here another value

play12:19

we have a touch change event we have

play12:22

here another event for example when we

play12:27

provide here another value here for this

play12:30

input we can see here all the events

play12:33

that are currently being fired

play12:36

internally in our form we can subscribe

play12:39

to them and react to them using these

play12:42

new events observable next up and the

play12:46

final feature that we're going to cover

play12:48

or one of the final features the

play12:51

possibility of using a function here in

play12:54

redirect two when configuring routes in

play12:58

angular 18 so before redirect to could

play13:01

only take a string now if you want to

play13:04

redirect based on some parameter such as

play13:08

for example on a router parameter or

play13:10

even a query parameter in the URL you

play13:13

can return here a string with the URL

play13:16

that you want to redirect to in our case

play13:19

we have here the lessons menu entry that

play13:22

is going to be redirected to the login

play13:25

page and finally to complete our

play13:28

coverage of of angular 18 we have

play13:31

available here a new version of angular

play13:35

material that is compatible with server

play13:39

side rendering with client hydration and

play13:42

that follows the angular material free

play13:45

specification so you will notice that

play13:47

the components are slightly different

play13:50

than before and if you want to learn

play13:53

angular in detail check out my courses

play13:56

at the angular University I'm currently

play13:59

finishing up my latest course which is

play14:01

the modern angular with signals course

play14:04

that you can find here already many

play14:07

hours of content are here available even

play14:10

though the course is not fully completed

play14:13

this covers how to build a modern

play14:15

angular application from A to Z using

play14:19

signals and with this I hope that you

play14:22

enjoyed this coverage of angular 18 let

play14:25

me know in the comment section below

play14:27

what you think about this release if if

play14:29

you are planning to migrate to zoness

play14:31

thank you so much for watching everyone

play14:33

and I will see you next time

Rate This

5.0 / 5 (0 votes)

Tags associés
AngularMigrationZonesZonessChangementsDéveloppementApplicationsReactifModèlesWebFormation