• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 01/07/2024

Passez en SPA avec le routing

Les Single Page Applications (ou SPA) sont de plus en plus courantes dans le monde du développement web moderne. Elles permettent une performance sans égale en enlevant le besoin d'une application de demander, recevoir, puis afficher une nouvelle page HTML à chaque changement d'URL. Angular vous permet avec le routing de créer ce genre d'application – à chaque URL correspondra un component, et Angular remplacera le component actif sans émettre de requête au serveur.

Dans l'application Snapface, vous allez créer une landing page afin de découvrir le fonctionnement du routing ; puis, dans les prochains chapitres, vous ajouterez une autre route et d'autres fonctionnalités de routing pour créer une application plus complète !

Configurez le fichier de routing

La configuration des routes de l'application se fait dans  app.routes.ts  . Commencez par y ajouter la route  facesnaps  :

import { Routes } from '@angular/router';
import { FaceSnapListComponent } from './face-snap-list/face-snap-list.component';

export const routes: Routes = [
  { path: 'facesnaps', component: FaceSnapListComponent }
];

C'est aussi simple que ça, car Angular a déjà configuré le router avec cette constante en appelant  provideRouter  dans  app.config.ts  :

import { ApplicationConfig, LOCALE_ID } from '@angular/core';
import { provideRouter } from '@angular/router';

import { routes } from './app.routes';

export const appConfig: ApplicationConfig = {
  providers: [
    provideRouter(routes),
    { provide: LOCALE_ID, useValue: 'fr-FR' }
  ]
};

Maintenant, pour dire à Angular où il faut afficher le component lié à la route active, il faudra d'abord importer RouterOutlet dans AppComponent (vous pouvez retirer l'import de FaceSnapListComponent, car vous n'en aurez plus besoin !) :

import { Component } from '@angular/core';
import { HeaderComponent } from './header/header.component';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [
    HeaderComponent,
    RouterOutlet
  ],
  templateUrl: './app.component.html',
  styleUrl: './app.component.scss'
})
export class AppComponent {
}

Du coup, il ne vous reste plus qu'à remplacer la balise  <app-face-snap-list />  dans le template par  <router-outlet />  :

<app-header />
<router-outlet />

Comme ça, ce sera le routeur qui décidera quel component doit être affiché, et AppComponent qui décidera à quel niveau ce component sera ajouté. Dans ce cas, on a décidé que le AppHeader restera présent peu importe la route active, ce qui est plutôt réaliste : on pourrait même envisager d'y placer un menu de navigation pour l'application.

Si vous regardez votre application à l'adresse http://localhost:4200 :

Il n'y a plus de FaceSnaps sur la page principale…
Une application vide

À votre avis, pourquoi rien ne s'affiche ?

Eh bien, c'est parce que vous n'avez pas spécifié de component pour la route "vide" ! Cependant, si vous allez à http://localhost:4200/facesnaps, vous retrouverez l'affichage précédent.

Si vous changez de route via la barre d'adresse de votre navigateur, une nouvelle requête est envoyée au serveur de développement, et l'application est totalement rechargée.

Le but maintenant sera de créer une landing page pour la route "vide", qui permette d'accéder à la route  facesnaps.

Bienvenue sur Snapface !

Je vais commencer par vous présenter l'objectif de cette partie du chapitre, pour que vous puissiez essayer de tout faire vous-même.

Il faut :

  • Créer un component nommé LandingPageComponent :

    • ce component peut être aussi simple ou complexe que vous le souhaitez ! 

  • L'associer à la route vide dans votre routing (indice : le path d'une route vide est le string vide).

C'est à vous !

Et maintenant la solution (et la suite !) :

Pour créer LandingPageComponent, vous pouvez utiliser le CLI :

ng g c landing-page

Pour l'enregistrer comme étant le component à afficher pour la route vide, il faut ajouter une route à votre tableau  routes  dans AppRoutingModule :

const routes: Routes = [
  { path: 'facesnaps', component: FaceSnapListComponent },
  { path: '', component: LandingPageComponent }
];

Je vous partage ici le code de ma landing page, ainsi que l'image que j'ai utilisée pour le logo :

Le template :

<div class="landing-block">
  <img src="/assets/snapface-logo.png" alt="Snapface logo">
  <div class="landing-links">
    <a>Continuer vers Snapface</a>
  </div>
</div>

Les styles :

.landing-block {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.landing-links {
  width: 100%;
  text-align: center;
}

Et le logo :

Quel magnifique logo !
Le logo Snapface

Tout ça me donne, à http://localhost:4200 :

La nouvelle landing page de Snapface montre le header, le logo, et un lien pour Continuer vers Snapface
Landing page

Vous avez maintenant deux routes fonctionnelles ! Dans le prochain chapitre, vous mettrez en place deux systèmes pour permettre aux utilisateurs de passer d'une route à l'autre.

En résumé

  • Un fichier de routing contient un tableau de type  Routes  qui contient les routes de l'application.

  • Une route est un objet de type  { path: 'myPath', component: MyComponent }  qui spécifie le component à afficher pour chaque route.

  • On appelle  provideRouter  en passant le tableau de routes pour enregistrer les routes dans le routeur Angular.

  • On ajoute une balise  <router-outlet>  pour dire à quel niveau du template le component de la route active doit être inséré, en ajoutant RouterOutlet aux imports de ce component.

  • Pour ajouter des fichiers statiques à une application (comme des images), on les stocke dans le dossier  assets  .

 Vous êtes prêt pour finaliser votre SPA ? Suivez-moi au prochain chapitre !

Exemple de certificat de réussite
Exemple de certificat de réussite