SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Chapitre 3
Routage
Angular Routing
Ahlem ELHAJ
Multimédia et Développement Web – 2ème année – Semestre 1
ISET de Sousse
Développement Framework Coté Client - Angular
Introduction
 Application Web Monopage (Single Web Application)
◼ Accessible via une page web unique,
◼ Pas de chargement de nouvelle page lors de la navigation,
◼ Contenu affiché dynamiquement en fonction des actions de
l’utilisateur,
◼ Permet de fluidifier l’expérience de l’utilisateur.
 Une SPA requiert un système de routage (routing),
 Rôle du routing : permettre aux utilisateurs de garder
leurs habitudes de navigation :
◼ utiliser l'historique de leur navigateur (e.g. boutons back et next),
◼ copier les liens,
◼ ajouter une vue à leurs favoris,
◼ ouvrir une vue dans une nouvelle fenêtre via le menu contextuel
2
Fonctionnement du routeur
 Pour gérer la navigation entre les vues, Angular utilise un
Routeur.
 Pour assurer la navigation, le routeur interprète une
adresse URL comme étant un ordre de changement de
vue.
 Pour charger une vue donnée, il faut charger le
composant responsable de l’affichage de cette vue dans la
page unique de l’application (index.html).
◼ La vue associée au composant racine est toujours chargée (pour
toutes les URL).
◼ Les autres vues de l’application sont chargées sur demande.
 Pour inclure un lien, le développeur doit faire appel au
routeur (routerLink) à la place de <a href="adresse">
3
Module principal de routage
AppRoutingModule
 Il est vivement recommandé d’utiliser des modules
(NgModule) dédiés au routage au lieu de définir les routes
dans les modules de fonctionnalités,
 Pour générer le Module principal de routage
(AppRoutingModule) à la création de l’application :
ng new myApp --routing
 Le développeur peut définir des routes dans ce module
 Définition d’une route :
◼ {path : 'chemin', component : CompComponent}
◼ C’est une association entre un chemin (chaine de caractères
représentant une portion (segment) d’adresse URL) et un
composant Angular.
4
Exemple (1)
Définition des routes : app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Comp1Component } from './comp1/comp1.component';
import { Comp2Component } from './comp2/comp2.component';
const routes: Routes = [
{path : 'chemin1', component : Comp1Component},
{path :'chemin2', component : Comp2Component}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
5
Exemple (2)
Chargement des composants : <router-outlet>
 <router-outlet> : balise html utilisée pour mettre à jour
la vue de l’application en chargeant le composant associé
à la route sélectionnée :
 Le composant AppComponent est toujours chargé dans la
page de l’application : le sélecteur <app-root> de
AppComponent figure dans le <body> de index.html
 <router-outlet> est placée dans l’endroit dans lequel le
routeur doit charger le reste des composants selon les
URLs visitées.
6
<!-- fichier : app.component.html -->
<h1> Ceci est le contenu de appComponent</h1>
<router-outlet></router-outlet>
Exemple (3)
Vue initiale
7
Exemple (4)
Chemin1 (comp1)
8
Exemple (5)
Chemin2 (comp2)
9
Exemple (6)
Chemins inexistants
10
URL inexistante (erronée) ➔ redirection vers la page initiale
Exemple (7)
Chemins inexistants (2)
 Dans le fichier : app-routing.module.ts ajouter une route :
 '**’ : correspond à la route joker (toute URL correspond à la
route joker).
 Si une URL ne correspond à aucune des routes précédentes
(chemin1 et chemin2), alors le composant
PageNoteFoundComponent est chargé.
 Problème : la page initiale correspond à la route joker :
PageNotFoundComponent se charge initialement ! 11
const routes: Routes = [
{path : 'chemin1', component : Comp1Component},
{path :'chemin2', component : Comp2Component},
{path : '**', component : PageNotFoundComponent}
];
Exemple (8)
Redirection page d’accueil
 Dans le fichier : app-routing.module.ts ajouter une route :
 Page d’accueil redirigée vers chemin1,
 Les vues accessibles à travers chemin1 et chemin2 restent
inchangées,
 Les autres chemins (chemins erronés) permettent de charger
PageNotFoundComponent,
 Attention ! Très important : il faut que la route joker (**) soit
la dernière (toute route placée après la route joker n’est pas
accessible). 12
const routes: Routes = [
{path : 'chemin1', component : Comp1Component},
{path :'chemin2', component : Comp2Component},
{path :'', redirectTo : 'chemin1', pathMatch:'full'},
{path : '**', component : PageNotFoundComponent}
];
Exemple (9)
Liens
 routerLink : attribut html utilisé pour créer des liens dans
les templates des composants vers des chemins définis par le
routage (remplace href)
13
<!-- fichier : app.component.html -->
<h1> Ceci est le contenu de appComponent</h1>
<nav>
<ul>
<li><a routerLink="chemin1">Lien vers cmp1</a></li>
<li><a routerLink="chemin2">Lien vers cmp2</a></li>
</ul>
</nav>
<router-outlet></router-outlet>
Routage modulaire
 Il est conseillé de ne pas mettre toutes les routes dans le
module de routage principal, mais dans les modules de
routage additionnels associés aux modules de fonctionnalités.
 Pour créer un module ‘mod1’ (Mod1Module) et un module de
routage qui lui est associé (Mod1RoutingModule) :
ng generate module mod1 --routing
14
//fichier : mod1-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = []; //Tableau à remplir par des routes
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class Mod1RoutingModule { }
Routage imbriqué (1)
Nested routing - présentation
 Objectif : rendre les routes qui chargent certains composants
relatives à un composant autre que le composant racine
AppComponent,
 Notion de route fille (child route),
 Exemple. On se propose d’établir la hiérarchie des URLs
suivante: / (AppComponent)
site (ClientComponent)
home about
(HomeComponent) (AboutComponent)
Remarque. Sur le serveur de développement, ceci correspond aux adresses :
http://localhost:4200/
http://localhost:4200/site
http://localhost:4200/site/home
http://localhost:4200/site/home
15
Routage imbriqué (2)
Nested routing - définition de route imbriquée
16
const routes: Routes = [
{
path: 'site',
component: ClientComponent,
children: [
{
path: 'home',
component: HomeComponent,
},
{
path: 'about',
component: AboutComponent,
},
],
},
];
Routage imbriqué (3)
Nested routing - template du parent
17
<h2>Composant client</h2>
<nav><ul>
<li><a routerLink="home">HOME</a></li>
<li><a routerLink="about">ABOUT</a></li>
</ul></nav>
<router-outlet></router-outlet>
 Il faut utiliser la balise <router-outlet>:
◼ dans le template de AppComponent,
◼ mais aussi dans le template du composant ayant des composants
« fils » (relation père-fils établie à travers le routage).
 Template client.component.html :
 Par exemple, l’URL /site/about correspond au chargement
de AppComponent, ClientComponent et AboutComponent.
 Dans home.component.ts, lien vers /site/about :
<a routerLink="../about">ABOUT</a>
Conclusion
 Une application angular a un seul fichier index.html dans
lequel l'application entière est chargée.
 Le point d'entrée de l'application est le composant
AppComponent.
 Le template de AppComponent est utilisé pour afficher les
parties fixes de l'application (par exemple une barre d'en-
tête).
 La balise <router-outlet> d’angular est utilisée pour
afficher les vues associées à l’URL actuelle.
 Il est possible de définir des routes imbriquées
(hiérarchiques) grâce au nested routing.
18

Mais conteúdo relacionado

Semelhante a Chapitre-3-Routage.pdf (9)

Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdflaravel.sillo.org-Cours Laravel 10  les bases  artisan et les contrôleurs_2.pdf
laravel.sillo.org-Cours Laravel 10 les bases artisan et les contrôleurs_2.pdf
 
Paris ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websites
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
Technologies sur angular.pptx
Technologies sur angular.pptxTechnologies sur angular.pptx
Technologies sur angular.pptx
 
Développement d'une application de cartographie interactive sur internet
Développement d'une application de cartographie interactive sur internetDéveloppement d'une application de cartographie interactive sur internet
Développement d'une application de cartographie interactive sur internet
 
Activity
ActivityActivity
Activity
 
Interface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TViewInterface texte plein écran en Go avec TView
Interface texte plein écran en Go avec TView
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 

Mais de BoubakerMedanas (7)

POO-Cours.pdf
POO-Cours.pdfPOO-Cours.pdf
POO-Cours.pdf
 
Chap-SQL-LID-P1.pdf
Chap-SQL-LID-P1.pdfChap-SQL-LID-P1.pdf
Chap-SQL-LID-P1.pdf
 
Chap1Concepts-FondamentauxBD.pdf
Chap1Concepts-FondamentauxBD.pdfChap1Concepts-FondamentauxBD.pdf
Chap1Concepts-FondamentauxBD.pdf
 
course1-Intrduction-to-the-game-industry.pdf
course1-Intrduction-to-the-game-industry.pdfcourse1-Intrduction-to-the-game-industry.pdf
course1-Intrduction-to-the-game-industry.pdf
 
Chapitre-3-Routage.pdf
Chapitre-3-Routage.pdfChapitre-3-Routage.pdf
Chapitre-3-Routage.pdf
 
Chapitre 2-Data binding.pdf
Chapitre 2-Data binding.pdfChapitre 2-Data binding.pdf
Chapitre 2-Data binding.pdf
 
Chapitre 2-Data binding.pdf
Chapitre 2-Data binding.pdfChapitre 2-Data binding.pdf
Chapitre 2-Data binding.pdf
 

Chapitre-3-Routage.pdf

  • 1. Chapitre 3 Routage Angular Routing Ahlem ELHAJ Multimédia et Développement Web – 2ème année – Semestre 1 ISET de Sousse Développement Framework Coté Client - Angular
  • 2. Introduction  Application Web Monopage (Single Web Application) ◼ Accessible via une page web unique, ◼ Pas de chargement de nouvelle page lors de la navigation, ◼ Contenu affiché dynamiquement en fonction des actions de l’utilisateur, ◼ Permet de fluidifier l’expérience de l’utilisateur.  Une SPA requiert un système de routage (routing),  Rôle du routing : permettre aux utilisateurs de garder leurs habitudes de navigation : ◼ utiliser l'historique de leur navigateur (e.g. boutons back et next), ◼ copier les liens, ◼ ajouter une vue à leurs favoris, ◼ ouvrir une vue dans une nouvelle fenêtre via le menu contextuel 2
  • 3. Fonctionnement du routeur  Pour gérer la navigation entre les vues, Angular utilise un Routeur.  Pour assurer la navigation, le routeur interprète une adresse URL comme étant un ordre de changement de vue.  Pour charger une vue donnée, il faut charger le composant responsable de l’affichage de cette vue dans la page unique de l’application (index.html). ◼ La vue associée au composant racine est toujours chargée (pour toutes les URL). ◼ Les autres vues de l’application sont chargées sur demande.  Pour inclure un lien, le développeur doit faire appel au routeur (routerLink) à la place de <a href="adresse"> 3
  • 4. Module principal de routage AppRoutingModule  Il est vivement recommandé d’utiliser des modules (NgModule) dédiés au routage au lieu de définir les routes dans les modules de fonctionnalités,  Pour générer le Module principal de routage (AppRoutingModule) à la création de l’application : ng new myApp --routing  Le développeur peut définir des routes dans ce module  Définition d’une route : ◼ {path : 'chemin', component : CompComponent} ◼ C’est une association entre un chemin (chaine de caractères représentant une portion (segment) d’adresse URL) et un composant Angular. 4
  • 5. Exemple (1) Définition des routes : app-routing.module.ts import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { Comp1Component } from './comp1/comp1.component'; import { Comp2Component } from './comp2/comp2.component'; const routes: Routes = [ {path : 'chemin1', component : Comp1Component}, {path :'chemin2', component : Comp2Component} ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { } 5
  • 6. Exemple (2) Chargement des composants : <router-outlet>  <router-outlet> : balise html utilisée pour mettre à jour la vue de l’application en chargeant le composant associé à la route sélectionnée :  Le composant AppComponent est toujours chargé dans la page de l’application : le sélecteur <app-root> de AppComponent figure dans le <body> de index.html  <router-outlet> est placée dans l’endroit dans lequel le routeur doit charger le reste des composants selon les URLs visitées. 6 <!-- fichier : app.component.html --> <h1> Ceci est le contenu de appComponent</h1> <router-outlet></router-outlet>
  • 10. Exemple (6) Chemins inexistants 10 URL inexistante (erronée) ➔ redirection vers la page initiale
  • 11. Exemple (7) Chemins inexistants (2)  Dans le fichier : app-routing.module.ts ajouter une route :  '**’ : correspond à la route joker (toute URL correspond à la route joker).  Si une URL ne correspond à aucune des routes précédentes (chemin1 et chemin2), alors le composant PageNoteFoundComponent est chargé.  Problème : la page initiale correspond à la route joker : PageNotFoundComponent se charge initialement ! 11 const routes: Routes = [ {path : 'chemin1', component : Comp1Component}, {path :'chemin2', component : Comp2Component}, {path : '**', component : PageNotFoundComponent} ];
  • 12. Exemple (8) Redirection page d’accueil  Dans le fichier : app-routing.module.ts ajouter une route :  Page d’accueil redirigée vers chemin1,  Les vues accessibles à travers chemin1 et chemin2 restent inchangées,  Les autres chemins (chemins erronés) permettent de charger PageNotFoundComponent,  Attention ! Très important : il faut que la route joker (**) soit la dernière (toute route placée après la route joker n’est pas accessible). 12 const routes: Routes = [ {path : 'chemin1', component : Comp1Component}, {path :'chemin2', component : Comp2Component}, {path :'', redirectTo : 'chemin1', pathMatch:'full'}, {path : '**', component : PageNotFoundComponent} ];
  • 13. Exemple (9) Liens  routerLink : attribut html utilisé pour créer des liens dans les templates des composants vers des chemins définis par le routage (remplace href) 13 <!-- fichier : app.component.html --> <h1> Ceci est le contenu de appComponent</h1> <nav> <ul> <li><a routerLink="chemin1">Lien vers cmp1</a></li> <li><a routerLink="chemin2">Lien vers cmp2</a></li> </ul> </nav> <router-outlet></router-outlet>
  • 14. Routage modulaire  Il est conseillé de ne pas mettre toutes les routes dans le module de routage principal, mais dans les modules de routage additionnels associés aux modules de fonctionnalités.  Pour créer un module ‘mod1’ (Mod1Module) et un module de routage qui lui est associé (Mod1RoutingModule) : ng generate module mod1 --routing 14 //fichier : mod1-routing.module.ts import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; const routes: Routes = []; //Tableau à remplir par des routes @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class Mod1RoutingModule { }
  • 15. Routage imbriqué (1) Nested routing - présentation  Objectif : rendre les routes qui chargent certains composants relatives à un composant autre que le composant racine AppComponent,  Notion de route fille (child route),  Exemple. On se propose d’établir la hiérarchie des URLs suivante: / (AppComponent) site (ClientComponent) home about (HomeComponent) (AboutComponent) Remarque. Sur le serveur de développement, ceci correspond aux adresses : http://localhost:4200/ http://localhost:4200/site http://localhost:4200/site/home http://localhost:4200/site/home 15
  • 16. Routage imbriqué (2) Nested routing - définition de route imbriquée 16 const routes: Routes = [ { path: 'site', component: ClientComponent, children: [ { path: 'home', component: HomeComponent, }, { path: 'about', component: AboutComponent, }, ], }, ];
  • 17. Routage imbriqué (3) Nested routing - template du parent 17 <h2>Composant client</h2> <nav><ul> <li><a routerLink="home">HOME</a></li> <li><a routerLink="about">ABOUT</a></li> </ul></nav> <router-outlet></router-outlet>  Il faut utiliser la balise <router-outlet>: ◼ dans le template de AppComponent, ◼ mais aussi dans le template du composant ayant des composants « fils » (relation père-fils établie à travers le routage).  Template client.component.html :  Par exemple, l’URL /site/about correspond au chargement de AppComponent, ClientComponent et AboutComponent.  Dans home.component.ts, lien vers /site/about : <a routerLink="../about">ABOUT</a>
  • 18. Conclusion  Une application angular a un seul fichier index.html dans lequel l'application entière est chargée.  Le point d'entrée de l'application est le composant AppComponent.  Le template de AppComponent est utilisé pour afficher les parties fixes de l'application (par exemple une barre d'en- tête).  La balise <router-outlet> d’angular est utilisée pour afficher les vues associées à l’URL actuelle.  Il est possible de définir des routes imbriquées (hiérarchiques) grâce au nested routing. 18