ch3
ch3
ch3
Composition d’une
Application Angular
2
3
Application Angular – Structure
• e2e: Tout ce qui va concerner les tests end to end (tests d’intégration)
• node_modules: contient les dépendances installés avec npm
• src: les différents éléments de l’application (composants, services, …)
• src/app : le code de l’application
• package.json : fichier déclarant les dépendances NPM tirées lors de
l'installation du projet et nécessaire à la compilation et les tests
• tslint.json : fichier définissant les règles de codage TypeScript.
• tsconfig.json: un fichier de définition TypeScrit
• src/assets : où placer tous les assets tels que les images.
• src/environments : on retrouve les différents fichiers de configuration
spécifiques aux environnements d’exécution.
4
Modules/NgModules
Un module est un bloc de code qui sert à encapsuler des fonctionnalités similaires
une application.
La classe qui décrit le module Angular est une classe décorée par @NgModule.
5
Modules/Exemples
6
NgModule
Métadata ou métadonnée est un objet qui décrit le comportement d’un élément qui est
dans notre cas le module
7
NgModule – métadata
8
Composant-Définition
9
Un composant crée est décrit par
défaut par quatre fichiers :
Fichier Rôle
nomComp.component.ts Classe décrit le métier du composant
nomComp.component.html Fichier template du composant
nomComp.component.css Fichier de style du composant
nomComp.component.spec.ts Fichier de test du composant
10
Un composant définit de(s) vue(s) et utilise de(s) service(s) pour réaliser un traitement.
Le métier du composant est décrit dans la classe du composant qui peut être
exportée, définit par le décorateur @component et décrite par un objet «
métadata »
Composant-Métadata
Exemple: <app-root></app-root>
Les vues sont oragnisées d’une façon hiérarchique afin de pouvoir modifier ou cacher
des sections de pages ou des pages entières.
13
Angular Syntax template-Data binding
14
Rappel : Interpolation & Proprety-Binding
15
Rappel : Event-Binding & Two-Way-data-binding
Event binding permet d’appeler une méthode du composant suite à une action faite
par l’utilisateur au niveau du template.
Two-way data binding permet de récupérer une valeur à partir du template et l’envoyer
vers une propriété et vis versa.
16
Interaction entre composants
17
Interaction entre composants-2-
18
Interaction entre composants-3-
Le composant parent peut alors envoyer des données au composant fils et entend les
événements déclenchés au niveau de son fils.
19
Cycle de vie d’un composant
cycle de vie :Un composant passe par plusieurs phases depuis sa création jusqu’à sa
destruction.
Angular maintient et suit ces différentes phases en utilisant des méthodes appelées «
hooks ».
20
Cycle de vie d’un composant-2-
21
Cycle de vie d’un composant-3
22
Cycle de vie d’un composant-4
23
Demo Atelier1 chapitre3:
24
Bootstrap Atelier1 Angular Forms Atelier2 Angular Service TP2
Atelier1 chapitre3:
25
Atelier1 chapitre3: créer la classe « message.service.ts »
26
Atelier1 chapitre3: Parent component
27
Atelier1 chapitre3: Frere component
28
Atelier1 chapitre3: fils component
Dans app.component.html :
<app-parent></app-parent>
29
Atelier2 chapitre3: Demo
30
Atelier2 chapitre3: Explication
31
Atelier2 chapitre3: Explication
Dans le dossier src/app, créez un fichier nommé product.model.ts pour définir le modèle de
produit
32
Étape 3 : ProductListComponent (Composant Père)
Ce composant contient la liste des produits et gère la sélection d'un produit pour afficher ses
détails dans un composant frère.
Le composant ProductListComponent est considéré comme le composant père qui gère la liste
des produits et la logique de sélection d'un produit particulier pour afficher ses détails dans un
autre composant.
33
Explication des rôles et étapes dans ProductListComponent :
Il affiche cette liste dans une boucle avec *ngFor dans le template HTML. Chaque produit est
rendu comme un élément de liste <li>.
Lorsqu’un produit est cliqué, cela déclenche une méthode appelée onSelectProduct, qui
sélectionne le produit cliqué.
2- Sélection d'un produit :
Quand l’utilisateur clique sur un produit dans la liste, onSelectProduct(product) est appelée avec
le produit sélectionné comme argument.
Cette méthode met à jour une propriété appelée selectedProduct dans ProductListComponent,
qui représente le produit actuellement sélectionné.
En définissant selectedProduct, ProductListComponent peut gérer quel produit afficher dans les
composants enfants, ce qui est essentiel pour permettre la communication entre les
composants.
3- Affichage des détails et modification dans les composants frères :
ProductListComponent utilise la propriété selectedProduct pour partager le produit sélectionné avec deux
autres composants :
ProductDetailComponent : Ce composant est un frère de ProductComponent et est utilisé pour afficher les
détails du produit sélectionné.
selectedProduct est passé en tant qu’entrée (@Input) aux composants frères, permettant à
ProductDetailComponent d'afficher les informations actuelles du produit et à ProductComponent de pré-
remplir le formulaire de modification.
4- Mise à jour et réactivité entre les composants frères :
onUpdateProduct met à jour la liste des produits pour refléter les nouvelles informations et
met également à jour selectedProduct avec une nouvelle instance pour déclencher la
détection de changement dans Angular.
Ce composant représente le formulaire d'un produit pour modifier ses informations. Il envoie les
modifications au composant parent ProductListComponent.
Dans cette architecture, ProductComponent est un composant fils de ProductListComponent. Son rôle
principal est de fournir un formulaire pour modifier les informations d'un produit sélectionné, puis
d'envoyer les modifications au composant parent (ProductListComponent).
ProductComponent reçoit un objet product via un décorateur @Input de la part de son parent
(ProductListComponent). Ce produit est le produit actuellement sélectionné dans la liste.
Il affiche un formulaire pré-rempli avec les informations actuelles de ce produit, comme le nom, le prix
et la description, en utilisant la directive [(ngModel)] pour la liaison bidirectionnelle des données.
2- Modification des informations du produit :
Grâce à [(ngModel)], les champs du formulaire sont liés directement aux propriétés de l'objet product,
ce qui permet de capturer les modifications en temps réel.
Cet événement envoie le produit mis à jour comme payload vers le composant parent.
Le composant parent (ProductListComponent) écoute cet événement et reçoit les modifications pour
mettre à jour la liste des produits et le produit sélectionné.
Étape 5 : ProductDetailComponent (Composant Frère)
Il affiche les détails du produit (comme le nom, le prix et la description) dans un format lisible pour l'utilisateur.
Son rôle est strictement limité à l'affichage des informations, ce qui en fait un composant purement visuel.
Cet atelier crée une application où le ProductListComponent agit comme le composant parent,
et gère la communication entre le ProductComponent (fils) et le ProductDetailComponent
(frère). Les formulaires et les hooks du cycle de vie (ngOnInit, ngOnChanges) sont également
utilisés pour illustrer un flux de données complet et la modification d’un produit.