Académique Documents
Professionnel Documents
Culture Documents
1. Introduction
2. Routage et navigation
3. Les Services
4. Angular Forms
Introduction
• Framework JavaScript (ou TypeScript)
• Présenté par Google en 2009
• Permettant de créer des applications web et mobiles
▪ Front-End (l’ensemble des éléments visibles et accessibles directement sur une application web ou une application
web mobile)
▪ Single page Application (Une SPA est une application qui contient une seule page HTML (index.html) récupérée du
serveur).
• Respecte l’architecture MVVM (Model-View-ViewModel)
▪ Model : représenté généralement par une classe référencée par la couche d’accès aux données (classe ou interface
TypeScript).
▪ View: contenant la disposition et l’apparence de ce qu’un utilisateur voit à l’ écran, recevant l’interaction avec
l’utilisateur : clic, saisie, survol...
▪ ViewModel: remplaçant du contrôleur dans l’architecture MVC, connecté à la vue par le data binding, représenté
dans Angular par un fichier *.component.ts.
• Angular utilise les langages suivants:
• HTML pour les vues. HTML pour les vues.
• CSS pour les styles.
• TypeScript pour les scripts depuis la version 2.
H
4
Introduction-Historique
• Angular 1 (Agular JS) :
H
5
Architecture de base d’une application Angular
6
Installation
• Pour installer Angular, il faut télécharger et installer NodeJS (Dernière version stable LTS)
• Pour installer Angular, exécuter la commande
npm install –g @angular/cli
• Pour installer une version bien précise (par exemple 8)
npm install –g @angular/cli@8
• Pour vérifier la version d’Angular installée, exécuter la commande
ng version
➢ npm (node package manager) : le gestionnaire de paquets par défaut pour une application JavaScript.
➢ angular-cli (command line interface) : outil proposé par Google pour faciliter la création et la
construction d’une application Angular en exécutant directement des commandes. 7
Commandes CLI à utiliser fréquemment
Commandes Besoins
9
Structure du Projet Angular
Un composant peut être inséré dans n’importe quelle partie HTML de l’application en utilisant
son sélecteur associé.
Un composant est une classe qui possède le décorateur @Component. Ce décorateur possède
les propriétés suivantes :
Event Binding : dans Angular , event binding est utilisé pour gérer les événements
déclenchés comme le clic de bouton, le déplacement de la souris, etc. Lorsque
l'événement se produit, il appelle la méthode spécifiée dans le composant.
Exemple:
String interpolation:est une technique
de One Way Binding, elle utilise
l'expression {{ }} pour afficher les
données du composant dans la vue.
Exemple:
Two-way binding : nous avons vu que dans la le One Way Binding, tout changement dans la
vue n'était pas reflété dans le composant. Pour résoudre ce problème, Angular Two Way
Binding.
app.component.html
app.component.ts
Remarque : il faut ajouter « FormsModule» dans le tableau imports du fichier app.module.ts
12
Les directives Le DOM (Document Object Model) est une interface de
programmation qui est une représentation du HTML d'une page web et
qui permet d'accéder aux éléments de cette page web et de les modifier
• Les directives sont des instructions intégrées dans le DOM. avec le langage JavaScript. Il faut voir le DOM comme un arbre où
chaque élément peut avoir zéro ou plusieurs enfants, qui peuvent avoir
eux-mêmes zéro ou plusieurs enfants, etc…
• Quand Angular lit le template et rencontre une directive qu'il reconnait, il suit les instructions correspondantes.
• La directive *ngFor : elle est très utile dans le cas d’un tableau et qu’on a besoin de répéter un traitement donné.
Exemple : <ul>
<li *ngFor="let p of produits">{{ p.nom }}</li>
</ul>
• La directive *ngIf : est utilisée lorsque vous souhaitez afficher ou supprimer un élément en fonction d'une condition. Prend un
booléen en paramètre. Tout comme nous sommes habitués à d’autres langages de programmation, la directive angular ngIf nous
permet également de déclarer un bloc else. Ce bloc est affiché si l’instruction définie dans le bloc principal put être fausse.
Exemple : <div *ngIf="x%2 != 0 ;else sinon "> impair</div>
…
…
<ng-template #sinon>pair</ng-template> 13
Les directives
• La directive [ngStyle] : Cette directive permet de modifier le style d’un élément HTML. Elle s’utilise
conjointement avec le property binding pour récupérer des valeurs définies dans la classe.
• La directive [ngClass]:permet d’attribuer de nouvelles classes d’un élément HTML. S’utilise conjointement
avec le property binding pour récupérer des valeurs définies dans la classe ou dans la feuille de style.
Exemple:
On définit deux classes rouge et bleu dans app.component.css
.rouge {
color: red;
}
.bleu {
color: blue;
}
Pour associer la classe rouge à la balise <p>
<p [ngClass]="{’rouge’: true}">
{{ nom }}
</p>
On peut aussi appeler une méthode dans la directive ngClass 14
Les pipes
• Les Pipes sont des filtres utilisables directement depuis la vue afin de transformer les valeurs lors du "binding".
• Il existe plusieurs pipes natives dans Angular comme par exemple DecimalPipe, UpperCasePipe,
CurrencyPipe, etc.
• Exemple: {{nom|uppercase}},{{prix|currency:'TND':'symbol':'2.2-2'}}
15
Introduction au Routage
• En général, on ne cherche pas à afficher tous les composants au même temps dans le bloc
principal.
• Un système de routing permet d’associer une route (url - path) à un traitement particulier.
• Il s'agit des instructions d'affichage à suivre pour chaque URL, c'est-à-dire quel(s)
component(s) il faut afficher à quel(s) endroit(s) pour un URL donné.
• Le routeur angular permet la navigation d'une vue à l'autre lorsque les utilisateurs exécutent
des tâches d'application.
17
AppRouting module
18
Création d’un système de Routing
• La constante routes représente les chemins à déclarer dans un projet Angular:
➢Chaque objet {path: « url du composant », component: « la class du composant concerné »}
19
Application de routage
• Pour appliquer un routage dans une vue ( HTML Template), on a besoin des directives suivantes:
▪ routerLink: c’est une directive prenant en valeur le chemin (path) indiqué dans la table routes
▪ Router-outlet est une directive qui permet de spécifier l’endroit ou la vue va être chargée. Sa syntaxe est
<router-outlet></router-outlet>
20
Redirection
• redirectTo: est une propriété ajouté dans l’objet du route pour rediriger une route
• Cette propriété permet d’indiquer vers quelle route le path doit être redirigé.
21
Route parametres
ou
22
Récupération des paramètres
1. Importer ActivatedRoute qui nous permettra de récupérer les paramètres de la route.
2. Injecter ActivatedRoute au niveau du composant. Injection de dépendances: consiste
à créer dynamiquement (injecter) les
3. Affecter le paramètre à une variable du composant dépendances entre les différents
objets en s'appuyant sur une
description (fichier de configuration
• L’affectation peut être faite de plusieurs façons: ou métadonnées) ou de manière
programmatique.
• Méthode 1: un snapshot de l’URL via le ActivatedRoute Ainsi les dépendances entre
composants logiciels ne sont plus
exprimées dans le code de manière
statique mais déterminées
dynamiquement à l'exécution.
ou
23
Récupération des paramètres
• Une autre méthode pour récupérer des données : queryParams
• Les queryParameters sont les paramètres envoyé à travers une requête GET.
• Identifié avec le ?.
24
Application du route via composant
• Afin de déclencher une route à travers le composant on utilise l’objet Router et sa méthode navigate.
• Cette méthode prend le même paramètre que le routerLink, à savoir un tableau contenant la description
de la route.
• Afin d’utiliser le Route, il faut l’importer de l’@angular/router et l’injecter dans votre composant.
25
Wildcard route
• Le wildcard route permet de rediriger vers un composant si le chemin indiqué
n’existe pas ( The not found page):
26
Qu'est-ce un service?
• un service est une classe Type script décorée par @Injectable, qui peut contenir du code réutilisable, ou des données
qu’on veut partager entre plusieurs composants. (Eviter la redondance )
• Exemple de quelques services Angular utilisés dans les chapitres précédents :ActivatedRoute, Router
• Généralement, c’est les service qui interagissent avec la partie back end de l’application en envoyant des requêtes
HTTP.
28
Création d’un service
• Pour créer un service : ng generate service service-name // ng g s service_name
@Injectable({
providedIn: 'root'
})
constructor() { }
• Depuis la version 6 d’Angular, on n’a plus besoin de déclarer les services dans la section providers dans app.module.ts
29
Injection des dépendances
• Lorsque Angular crée un composant, il demande d'abord à un injecteur les services requis.
• Si une instance de service demandée n'est pas dans le conteneur, l'injecteur en fait une et
l'ajoute au conteneur avant de renvoyer le service à Angular.
• Lorsque tous les services demandés ont été résolus et retournés, Angular peut appeler le
constructeur du composant avec ces services comme arguments.
30
Exemple d’interaction composant-service
import { Injectable } from '@angular/core';
import { Produit } from '../model/produit';
export class ProduitDetailComponent implements OnInit {
@Injectable({ produit:Produit
providedIn: 'root'
}) constructor(private ar:ActivatedRoute,
export class TestService { private router:Router,
private products:Array<Produit>=new Array<Produit>(); private service:TestService) { }
ngOnInit() {
constructor() { let id:number
this.products.push({id :1,nom :"pc",prix :1200,quantite :20, this.ar.paramMap.subscribe((params)=>{
urlImg :"./assets/images/pc portable.jfif"}); id=+params.get('id')
this.products.push({id :2,nom :"clavier",prix :10,quantite :10, console.log(" "+id+" ");
this.produit=this.service.getProductById(id)
urlImg :"./assets/images/clavier.jfif"});
});
this.products.push({id :3,nom :"souris",prix :5,quantite :0,
urlImg :"./assets/images/souris.jfif"}); }
}
public getProducts(){
return this.products;
}
public getProductById(id)
{
return this.products.find(x=>x.id==id);
}
} 31
Simulation de la partie backend (json-server)
• L’outil logiciel json-server est une solution simple pour simuler un API REST lors du développement de votre application.
{"id":1,
"nom":"pc portable",
"prix":1500,
"quantite":20,
"nomImg":"pc portable"
},…]
• Json-server va utiliser cette "base de données" pour stocker les données de l’application
• Postman sert à exécuter des appels HTTP directement depuis une interface graphique.
• Vous pourrez simplement choisir l'URL, la méthode HTTP (le plus souvent GET, POST, PUT, PATCH et DELETE), les
headers, les query params et dans certains cas le body de la requête.
• Méthodes http:
▪ GET: les requêtes GET sont celles effectuées par un navigateur lorsque vous entrez une URL dans la barre de
navigation. Elles ont pour but d’aller chercher une page ou de la donnée.
▪ POST: les requêtes POST ont pour but d’envoyer de l’information, contenue dans le body de la requête, vers le serveur.
▪ PUT: les requêtes PUT vont écraser une ressource avec de la nouvelle donnée, là aussi présente dans le body de la
requête. Elle est utilisée pour mettre à jour de la donnée à condition qu’on soit capable de fournir la ressource mise à
jour dans son intégralité.
▪ PATCH: les requêtes PATCH servent également à mettre à jour une ressource mais en ne modifiant que l’élément
envoyé en body de la requête.
▪ DELETE: comme son nom l’indique, la requête DELETE sert à effacer une ressource 33
Exemple
34
Module HTTP
• Un Http Service nous aidera à aller chercher des données externes, poster, etc.
• Afin d’utiliser le module HTTP, il faut l’injecter dans le composant ou le service dans
lequel vous voulez l’utiliser: constructor(private http:HttpClient)
35
Exemple d’un service
import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http'
import { Observable } from 'rxjs';
import { Produit } from '../model/produit';
@Injectable({
providedIn: 'root'
})
export class ProduitService {
Afin d’exécuter une requête get le module httpClient nous offre une
host="http://localhost:3000/produits/" méthode get(). Cette méthode retourne un Observale.
constructor(private client:HttpClient) { }
public getProducts():Observable<Produit[]>{
return this.client.get<Produit[]>(this.host);
}
public getProductById(id):Observable<Produit>
{
return this.client.get<Produit>(this.host+id); endPoint url
} (backend)
public addProduct(produit:Produit):Observable<void>
{
return this.client.post<void>(this.host,produit);
}
}
36
Utilisation d’un service
ListeProduitsComponent.ts
products:Produit[];
constructor(private service:ProduitService) { }
ngOnInit() {
this.service.getProducts().subscribe(data=>{
this.products=data;
……});
}
DetailsComponent.ts
product:Produit
constructor(private service:ProduitService, private ar: ActivatedRoute) {
}
ngOnInit() {
let id:number
this.ar.paramMap.subscribe((params)=>{
id=+params.get('id')
this.service.getProductById(id).subscribe(data=>{
this.product=data;
})
}); 37
Introduction
Angular propose deux types de forms :
Template driven forms (piloté par le template) : Reactive forms :
- Basé sur ReactiveFormsModule
- Utilisant FormsModule
- robuste,
- Basé sur les directives (ngmodel) - Évolutif,
- Conçu pour les applications nécessitant des
- Facile
contrôles particuliers.
- Conseillé pour les formulaires simples
• Form Group
• Form Builder
Template Driven Forms - ngModel
• Importer le module FormsModule dans module.ts
• Attribuer la valeur ngForm à une référence locale (#nomFormulaire) et la passer à votre méthode. Cette
méthode sera invoquée lorsque nous soumettons ((ngSubmit)) le formulaire.
• Avec ngModel, la valeur de l'attribut name deviendra une clé de l'objet de référence ngForm f que nous
avons créé.
• Outre l’attribut required, attribuer la directive "ngModel" à une variable locale (ex: #myVar="ngModel").
• Ici, f.valid renverra false sauf si tous les éléments du formulaire réussissent leurs contrôles de
validation respectifs. Le bouton d'envoi sera désactivé jusqu'à ce que le formulaire soit valide.