Styliser une application angulaire avec Bootstrap

Publié: 2022-03-10
Résumé rapide ↬ Dans ce didacticiel, nous utiliserons les dernières versions de Bootstrap 4 et Angular 7 pour créer une application Angular et styliser l'interface avec Bootstrap.

Si vous avez déjà essayé de créer une application Web avec Angular 7, il est temps de passer à la vitesse supérieure. Voyons comment nous pouvons intégrer les styles CSS Bootstrap et les fichiers JavaScript à un projet Angular généré à l'aide de la CLI Angular, et comment utiliser les contrôles de formulaire et les classes pour créer de beaux formulaires et comment styliser les tableaux HTML à l'aide des styles de tableau.

Pour la partie angulaire, nous allons créer une simple application côté client pour créer et répertorier les contacts. Chaque contact a un identifiant, un nom, un e-mail et une description, et nous utiliserons un service de données simple qui stocke les contacts dans un tableau TypeScript. Vous pouvez utiliser une API avancée en mémoire à la place. (Consultez "Un guide complet du routage en angulaire".)

Remarque : Vous pouvez obtenir le code source de ce didacticiel à partir de ce référentiel GitHub et voir l'exemple en direct ici.

Conditions

Avant de commencer à créer l'application de démonstration, voyons les exigences requises pour ce didacticiel.

En gros, vous aurez besoin des éléments suivants :

  • Node.js et NPM installés (vous pouvez simplement vous rendre sur le site officiel et télécharger les binaires pour votre système),
  • Familiarité avec TypeScript,
  • Expérience de travail d'Angular,
  • Connaissances de base en CSS et HTML.
Plus après saut! Continuez à lire ci-dessous ↓

Installation de la CLI angulaire

Commençons par installer la dernière version de Angular CLI. Dans votre terminal, exécutez la commande suivante :

 $ npm install -g @angular/cli

Au moment de la rédaction, la v7.0.3 de Angular CLI est installée. Si la CLI est déjà installée, vous pouvez vous assurer que vous disposez de la dernière version en utilisant cette commande :

 $ ng --version

Créer un projet

Une fois que vous avez installé Angular CLI, utilisons-le pour générer un projet Angular 7 en exécutant la commande suivante :

 $ ng new angular-bootstrap-demo

La CLI vous demandera alors :

Souhaitez-vous ajouter le routage angulaire ?

Appuyez sur Y . Ensuite, il vous demandera :

Quel format de feuille de style souhaitez-vous utiliser ?

Choisissez « CSS ».

Ajout de bootstrap

Après avoir créé le projet, vous devez installer Bootstrap 4 et l'intégrer à votre projet Angular.

Tout d'abord, naviguez dans le dossier racine de votre projet :

 $ cd angular-bootstrap-demo

Ensuite, installez Bootstrap 4 et jQuery depuis npm :

 $ npm install --save bootstrap jquery

(Dans ce cas, bootstrap v4.2.1 et jquery v3.3.1 sont installés.)

Enfin, ouvrez le fichier angular.json et ajoutez les chemins d'accès aux fichiers Bootstrap CSS et JS ainsi que jQuery aux tableaux de styles et de scripts sous la cible de build :

 "architect": { "build": { [...], "styles": [ "src/styles.css", "node_modules/bootstrap/dist/css/bootstrap.min.css" ], "scripts": [ "node_modules/jquery/dist/jquery.min.js", "node_modules/bootstrap/dist/js/bootstrap.min.js" ] },

Découvrez comment ajouter Bootstrap à un projet Angular 6 pour savoir comment intégrer Bootstrap à Angular.

Ajouter un service de données

Après avoir créé un projet et ajouté Bootstrap 4, nous allons créer un service Angular qui sera utilisé pour fournir des données de démonstration à afficher dans notre application.

Dans votre terminal, exécutez la commande suivante pour générer un service :

 $ ng generate service data

Cela créera deux fichiers src/app/data.service.spec.ts et src/app/data.service.ts .

Ouvrez src/app/data.service.ts et remplacez son contenu par ce qui suit :

 import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class DataService { contacts = [ {id: 1, name: "Contact 001", description: "Contact 001 des", email: "[email protected]"}, {id: 2, name: "Contact 002", description: "Contact 002 des", email: "[email protected]"}, {id: 3, name: "Contact 003", description: "Contact 003 des", email: "[email protected]"}, {id: 4, name: "Contact 004", description: "Contact 004 des", email: "[email protected]"} ]; constructor() { } public getContacts():Array<{id, name, description, email}>{ return this.contacts; } public createContact(contact: {id, name, description, email}){ this.contacts.push(contact); } }

Nous ajoutons un tableau de contacts avec des contacts de démonstration, une méthode getContacts() qui renvoie les contacts et un createContact() qui ajoute un nouveau contact au tableau de contacts .

Ajout de composants

Après avoir créé le service de données, nous devons ensuite créer des composants pour notre application. Dans votre terminal, exécutez :

 $ ng generate component home $ ng generate component contact-create $ ng generate component contact-list

Ensuite, nous ajouterons ces composants au module de routage pour permettre la navigation dans notre application. Ouvrez le fichier src/app/app-routing.module.ts et remplacez son contenu par ce qui suit :

 import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { ContactListComponent } from './contact-list/contact-list.component'; import { ContactCreateComponent } from './contact-create/contact-create.component'; import { HomeComponent } from './home/home.component'; const routes: Routes = [ {path: "", pathMatch: "full",redirectTo: "home"}, {path: "home", component: HomeComponent}, {path: "contact-create", component: ContactCreateComponent}, {path: "contact-list", component: ContactListComponent} ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { }

Nous utilisons la propriété redirectTo du chemin du routeur pour rediriger les utilisateurs vers la page d'accueil lorsqu'ils visitent notre application.

Ajout de composants d'en-tête et de pied de page

Ensuite, créons les composants d'en-tête et de pied de page :

 $ ng generate component header $ ng generate component footer

Ouvrez le fichier src/app/header/header.component.html et ajoutez le code suivant :

 <nav class="navbar navbar-expand-md bg-dark navbar-dark fixed-top"> <a class="navbar-brand" href="#">Angular Bootstrap Demo</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse"> <ul class="navbar-nav mr-auto"> <li class="nav-item"> <a class="nav-link" routerLink="/home">Home</a> </li> <li class="nav-item"> <a class="nav-link" routerLink="/contact-list">Contacts</a> </li> <li class="nav-item"> <a class="nav-link" routerLink="/contact-create">Create</a> </li> </ul> </div> </nav>

Une barre de navigation sera créée avec Bootstrap 4, et nous utiliserons la directive routerLink pour établir un lien vers différents composants.

Utilisez les .navbar , .navbar-expand{-sm|-md|-lg|-xl} et .navbar-dark pour créer des barres de navigation Bootstrap. (Pour plus d'informations sur les barres de navigation, consultez la documentation de Bootstrap sur "Navbar".

Ensuite, ouvrez le fichier src/app/header/header.component.css et ajoutez :

 .nav-item{ padding:2px; margin-left: 7px; }

Ensuite, ouvrez le fichier src/app/footer/footer.component.html et ajoutez :

 <footer> <p class="text-xs-center">© Copyright 2019. All rights reserved.</p> </footer>

Ouvrez le fichier src/app/footer/footer.component.css et ajoutez :

 footer { position: absolute; right: 0; bottom: 0; left: 0; padding: 1rem; text-align: center; }

Ensuite, ouvrez le fichier src/app/app.component.html et remplacez son contenu par ce qui suit :

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

Nous créons un shell d'application en utilisant les composants d'en-tête et de pied de page, ce qui signifie qu'ils seront présents sur chaque page de notre application. La seule partie qui sera modifiée est ce qui sera inséré dans la prise du routeur (consultez « The Application Shell » sur le site Web d'Angular pour plus d'informations).

Ajout d'un bootstrap Jumbotron

Selon la documentation Bootstrap :

"Un Jumbotron est un composant léger et flexible qui peut éventuellement étendre l'intégralité de la fenêtre d'affichage pour présenter des messages marketing clés sur votre site."

Ajoutons un composant Jumbotron à notre page d'accueil. Ouvrez le fichier src/app/home/home.component.html et ajoutez :

 <div class="jumbotron"> <h1>Angular Bootstrap Demo</h1> <p class="lead"> This demo shows how to integrate Bootstrap 4 with Angular 7 </p> <a class="btn btn-lg btn-primary" href="" role="button">View tutorial</a> </div>

La classe .jumbotron est utilisée pour créer un Bootstrap Jumbotron.

Ajout d'un composant de liste : utilisation d'une table d'amorçage

Créons maintenant des données de composant à liste à partir du service de données et utilisons une table Bootstrap 4 pour afficher les données tabulaires.

Tout d'abord, ouvrez le fichier src/app/contact-list/contact-list.component.ts et injectez le service de données puis appelez la méthode getContacts() pour obtenir les données lorsque le composant est initialisé :

 import { Component, OnInit } from '@angular/core'; import { DataService } from '../data.service'; @Component({ selector: 'app-contact-list', templateUrl: './contact-list.component.html', styleUrls: ['./contact-list.component.css'] }) export class ContactListComponent implements OnInit { contacts; selectedContact; constructor(public dataService: DataService) { } ngOnInit() { this.contacts = this.dataService.getContacts(); } public selectContact(contact){ this.selectedContact = contact; } }

Nous avons ajouté deux variables contacts et selectedContact qui contiennent l'ensemble des contacts et le contact sélectionné. Et une méthode selectContact() qui affecte le contact sélectionné à la variable selectedContact .

Ouvrez le fichier src/app/contact-list/contact-list.component.html et ajoutez :

 <div class="container"> <table class="table table-hover"> <thead> <tr> <th>#</th> <th>Name</th> <th>Email</th> <th>Actions</th> </tr> </thead> <tbody> <tr *ngFor="let contact of contacts"> <td>{{ contact.id }}</td> <td> {{ contact.name }}</td> <td> {{ contact.email }}</td> <td> <button class="btn btn-primary" (click)="selectContact(contact)"> Show details</button> </td> </tr> </tbody> </table> <div class="card text-center" *ngIf="selectedContact"> <div class="card-header"> # {{selectedContact.id}} </div> <div class="card-block"> <h4 class="card-title">{{selectedContact.name}}</h4> <p class="card-text"> {{selectedContact.description}} </p> </div> </div> </div>

Nous parcourons simplement le tableau des contacts et affichons les détails de chaque contact et un bouton pour sélectionner un contact. Si le contact est sélectionné, une carte Bootstrap 4 avec plus d'informations sera affichée.

Voici la définition d'une carte de Bootstrap 4 docs :

« Une carte est un conteneur de contenu flexible et extensible. Il comprend des options pour les en-têtes et les pieds de page, une grande variété de contenus, des couleurs d'arrière-plan contextuelles et de puissantes options d'affichage. Si vous connaissez Bootstrap 3, les cartes remplacent nos anciens panneaux, puits et vignettes. Des fonctionnalités similaires à ces composants sont disponibles en tant que classes de modificateurs pour les cartes.

Nous utilisons les .table et .table-hover pour créer des tableaux de style Bootstrap, les .card , .card-block , .card-title et .card-text pour créer des cartes. (Pour plus d'informations, consultez Tables et cartes.)

Ajout d'un composant de création : utilisation des contrôles et des classes de formulaire Bootstrap

Ajoutons maintenant un formulaire à notre composant contact-create . Tout d'abord, nous devons importer le FormsModule dans notre module d'application principal. Ouvrez le fichier src/app/app.module.ts , importez FormsModule depuis @angular/forms et ajoutez-le au tableau imports :

 import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; import { FormsModule } from '@angular/forms'; /* ... */ @NgModule({ declarations: [ /* ... */ ], imports: [ BrowserModule, AppRoutingModule, FormsModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }

Ensuite, ouvrez le fichier src/app/contact-create/contact-create.component.ts et remplacez son contenu par ce qui suit :

 import { Component, OnInit } from '@angular/core'; import { DataService } from '../data.service'; @Component({ selector: 'app-contact-create', templateUrl: './contact-create.component.html', styleUrls: ['./contact-create.component.css'] }) export class ContactCreateComponent implements OnInit { contact : {id, name, description, email} = {id: null, name: "", description: "", email: ""}; constructor(public dataService: DataService) { } ngOnInit() { } createContact(){ console.log(this.contact); this.dataService.createContact(this.contact); this.contact = {id: null, name: "", description: "", email: ""}; } }

Ensuite, ouvrez le fichier src/app/contact-create/contact-create.component.html et ajoutez le code suivant :

 <div class="container"> <div class="row"> <div class="col-sm-8 offset-sm-2"> <div> <form> <div class="form-group"> <label for="id">ID</label> <input [(ngModel)]="contact.id" type="text" name="id" class="form-control" placeholder="Enter ID"> <small class="form-text text-muted">Enter your contact's ID</small> <label for="name">Contact Name</label> <input [(ngModel)]="contact.name" type="text" name="name" class="form-control" placeholder="Enter your name"> <small class="form-text text-muted">Enter your contact's name</small> <label for="email">Contact Email</label> <input [(ngModel)]="contact.email" type="text" name="email" class="form-control" placeholder="Enter your email"> <small class="form-text text-muted">Enter your contact's email</small> <label for="description">Contact Description</label> <textarea [(ngModel)]="contact.description" name="description" class="form-control"> </textarea> <small class="form-text text-muted">Enter your contact's description</small> </div> </form> <button class="btn btn-primary" (click)="createContact()">Create contact</button> </div> </div> </div> </div>

Nous utilisons les .form-group , .form-control pour créer un formulaire de style Bootstrap (consultez « Formulaires » pour plus d'informations).

Nous utilisons la directive ngModel pour lier les champs du formulaire à la variable des composants. Pour que la liaison de données fonctionne correctement, vous devez attribuer un nom à chaque champ de formulaire.

Lecture recommandée : Gestion des points d'arrêt d'image avec Angular par Tamas Piros

Exécution de l'application angulaire

À cette étape, exécutons l'application et voyons si tout fonctionne comme prévu. Rendez-vous sur votre terminal, assurez-vous d'être dans le dossier racine de votre projet puis lancez la commande suivante :

 $ ng serve

Un serveur de développement live-reload fonctionnera à partir de l'adresse https://localhost:4200 . Ouvrez votre navigateur Web et accédez à cette adresse. Vous devriez voir l'interface suivante :

Démo Angular Bootstrap : Page d'accueil
( Grand aperçu )

Si vous accédez à la page Contacts, vous devriez voir :

Démo Bootstrap angulaire: page de contacts
( Grand aperçu )

Si vous accédez à la page "Créer un contact", vous devriez voir :

Démo Bootstrap angulaire : créer une page de contact
( Grand aperçu )

Conclusion

Dans ce tutoriel, nous avons vu comment créer une application Angular simple avec une interface Bootstrap. Vous pouvez trouver le code source complet sur GitHub et voir l'exemple en direct ici.