🚀 Angular 20 et Bootstrap : Le Guide Pratique pour les Faire Collaborer

Angular 20, arrivé en mai 2025, change véritablement la donne. Il est clair que l'équipe d'Angular met les bouchées doubles pour nous faciliter la vie en se concentrant sur la vitesse, une réactivité plus intelligente et une expérience de développement plus propre. Mais que se passe-t-il lorsque vous ajoutez un vieil ami comme Bootstrap dans l'équation ? Vous obtenez le meilleur des deux mondes : un framework de design responsive solide comme le roc, fonctionnant sur un moteur frontend moderne et suralimenté.

Ce guide est là pour vous accompagner pas à pas dans l'intégration de Bootstrap avec Angular 20, en portant une attention particulière aux nouvelles fonctionnalités qui modifient notre façon de construire les choses.

Bookmark This Article

Your browser doesn't support automatic bookmarking. You can:

  1. Press Ctrl+D (or Command+D on Mac) to bookmark this page
  2. Or drag this link to your bookmarks bar:
Bookmark This

Clicking this bookmarklet when on any page of our site will bookmark the current page.

Alors, quoi de neuf avec Angular 20 ?

Avant de plonger dans l'installation, passons rapidement en revue les fonctionnalités phares d'Angular 20, car elles influencent directement la manière dont nous allons gérer l'interface utilisateur.

Les Signaux sont au premier plan

L'API des Signaux (Signals) est désormais stable, et c'est un pas de géant. Pensez-y comme une manière plus directe de dire à votre application exactement ce qui doit être mis à jour, sans les grands coups de pinceau de Zone.js. Pour nous, cela signifie des interactions plus fluides et plus rapides avec les composants Bootstrap.

La vie sans Zone.js (Zoneless)

Le changement le plus important est peut-être le passage à des applications "zoneless" (sans Zone.js). Abandonner Zone.js peut sembler intimidant, mais les avantages sont énormes : - Des applications plus légères : La taille de vos bundles vous remerciera. - Une vitesse fulgurante : La détection des changements bénéficie d'un sérieux coup de fouet en termes de performances. - Un débogage simplifié : Les traces d'appels (stack traces) sont plus claires et plus faciles à suivre.

Lorsque l'on travaille avec Bootstrap, cela signifie simplement que nous devons être un peu plus explicites sur le moment où les mises à jour de l'interface utilisateur doivent se produire, en particulier avec les composants interactifs.

Des templates plus intelligents

Angular 20 donne à nos templates de nouveaux super-pouvoirs, comme l'utilisation d'opérateurs d'exponentiation (**) ou de l'opérateur in directement dans le HTML. C'est excellent pour créer des classes Bootstrap dynamiques à la volée sans surcharger la logique de nos composants.

Faire en sorte qu'Angular 20 et Bootstrap s'entendent bien

Allez, mettons les mains dans le cambouis. Voici quelques façons de configurer Bootstrap dans votre projet Angular 20.

Méthode 1 : L'installation classique via NPM

C'est la voie la plus directe. Ouvrez simplement votre terminal et lancez :

npm install bootstrap

Ensuite, vous devrez indiquer à Angular où trouver les fichiers. Rendez-vous dans votre fichier angular.json et mettez à jour le tableau styles :

"styles": [
  "node_modules/bootstrap/dist/css/bootstrap.min.css",
  "src/styles.css"
],

Besoin des fonctionnalités JavaScript de Bootstrap pour les menus déroulants ou les modales ? Ajoutez le bundle JS au tableau scripts dans le même fichier :

"scripts": [
  "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
]

Cette méthode est propre, simple et fonctionne très bien avec l'architecture "zoneless" d'Angular 20, car elle évite les conflits potentiels avec des bibliothèques comme jQuery.

Méthode 2 : L'approche native Angular avec ng-bootstrap

Si vous voulez des composants qui semblent vraiment intégrés à Angular, ng-bootstrap est votre meilleur allié. Il réinvente les composants Bootstrap sous forme de directives purement Angular.

ng add @ng-bootstrap/ng-bootstrap

Attention ! Juste après la sortie d'Angular 20, il y a eu un petit couac. Angular a renommé une fonction de afterRender en afterEveryRender, ce qui a causé des problèmes de compatibilité avec ng-bootstrap. Si vous rencontrez ce problème, vous avez deux options : 1. Vérifiez si l'équipe officielle de ng-bootstrap a publié un correctif pour Angular 20. 2. Si vous vous sentez d'humeur aventureuse, cherchez un correctif fourni par la communauté, comme celui discuté dans le ticket GitHub #4828.

Utiliser ng-bootstrap est fantastique dans un environnement "zoneless" car il est conçu pour se synchroniser avec le système de détection de changements d'Angular, et non pour le combattre.

Méthode 3 : L'autre option native, ngx-bootstrap

ngx-bootstrap est un autre excellent choix qui fournit des implémentations natives Angular des composants Bootstrap.

npm install ngx-bootstrap bootstrap

Vous pouvez ensuite importer uniquement les modules dont vous avez besoin. Dans une configuration traditionnelle basée sur les modules, cela ressemble à ceci :

import { TooltipModule } from 'ngx-bootstrap/tooltip';

@NgModule({
  imports: [TooltipModule.forRoot(), ...],
})
export class AppModule { }

Ou, si vous adoptez l'avenir avec les composants autonomes (standalone) :

import { TooltipModule } from 'ngx-bootstrap/tooltip';

@Component({
  selector: 'app-my-component',
  templateUrl: './my-component.component.html',
  standalone: true,
  imports: [TooltipModule]
})
export class MyComponent { }

Bootstrap dans le monde des composants autonomes

Angular 20 continue de promouvoir les composants autonomes comme la voie à suivre, nous permettant de construire des applications avec moins de code répétitif (boilerplate).

Utiliser les styles Bootstrap

Même dans un monde "standalone", vous ajouterez toujours le fichier CSS principal de Bootstrap dans angular.json. La magie opère à l'intérieur de votre composant, où vous pouvez importer directement des bibliothèques de composants spécifiques.

import { NgbAlertModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  standalone: true,
  imports: [NgbAlertModule, NgbAccordionModule] // Importez juste ce dont vous avez besoin
})
export class AppComponent { }

Démarrer une application autonome

Lorsque vous démarrez une application autonome, la configuration dans main.ts est épurée et propre :

// main.ts
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';

bootstrapApplication(AppComponent, {
  providers: [
    // Ajoutez ici les providers dont vos composants Bootstrap pourraient avoir besoin
  ]
}).catch(err => console.error(err));

Cela correspond parfaitement à la philosophie d'Angular 20 de construire des applications modulaires et ciblées.

Naviguer dans le nouveau monde "Zoneless"

Travailler sans Zone.js signifie que nous avons plus de contrôle, mais aussi un peu plus de responsabilités, surtout avec les événements de l'interface utilisateur.

Déclencher manuellement les changements

Parfois, un événement d'un composant Bootstrap (comme la fermeture d'une modale) peut se produire sans qu'Angular en soit conscient. Dans une application "zoneless", vous devrez peut-être donner un petit coup de pouce à Angular.

import { ChangeDetectorRef } from '@angular/core';

export class MyComponent {
  constructor(private cdr: ChangeDetectorRef) {}

  onBootstrapEvent() {
    // Faites ce que vous avez à faire...
    this.cdr.detectChanges(); // "Hey Angular, regarde par ici !"
  }
}

Laisser les Signaux faire le gros du travail

Une solution plus élégante consiste à utiliser les Signaux d'Angular 20 pour gérer l'état de vos composants Bootstrap.

import { Component, signal } from '@angular/core';

@Component({
  selector: 'app-modal-example',
  template: `
    <button (click)="toggleModal()">Ouvrir/Fermer la modale</button>
    `
})
export class ModalExampleComponent {
  isModalOpen = signal(false);

  toggleModal() {
    this.isModalOpen.update(value => !value);
  }
}

Cette approche puise directement dans le nouveau cœur réactif d'Angular 20, rendant vos mises à jour d'interface utilisateur incroyablement efficaces.

Boostez votre application avec le Rendu Côté Serveur (SSR)

Le SSR d'Angular 20 a reçu des améliorations fantastiques qui changent la façon dont nous gérons Bootstrap dans les applications rendues côté serveur.

Profiter de l'hydratation incrémentielle

L'hydratation incrémentielle permet à votre page rendue par le serveur de "s'éveiller" morceau par morceau au fur et à mesure que l'utilisateur interagit avec elle. C'est un gain de performance énorme pour les pages contenant de nombreux composants Bootstrap. La configuration dans votre server.ts pour une application autonome ressemblerait à quelque chose comme ça :

const _app = () => bootstrapApplication(AppComponent, {
  providers: [
    importProvidersFrom(ServerModule),
    // ... autres providers
  ],
});

server.engine('html', ngExpressEngine({
  bootstrap: _app
}));

Cela garantit que vos styles Bootstrap sont correctement rendus sur le serveur tout en offrant aux utilisateurs une expérience rapide et interactive côté client.

Personnalisez Bootstrap à votre image

Soyons honnêtes, vous ne voulez pas que votre application ressemble à tous les autres sites Bootstrap sur le web. La personnalisation avec Sass est la solution.

Concocter un thème personnalisé

Créez un fichier _variables.scss pour mettre votre propre touche sur les valeurs par défaut de Bootstrap.

// src/_variables.scss
$primary: #3f51b5; // Un joli indigo de Material Design
$font-family-base: 'Roboto', sans-serif;
$enable-responsive-font-sizes: true;

Ensuite, importez vos surcharges avant le fichier Sass principal de Bootstrap dans styles.scss :

// styles.scss
@import './variables';
@import 'bootstrap/scss/bootstrap';

Vous disposez maintenant d'un système de design unique qui bénéficie toujours de la grille responsive de Bootstrap et de la puissance brute d'Angular 20.

Nos conseils de pro pour une expérience sans accroc

En se basant sur les nouveautés d'Angular 20, voici nos conseils pour un partenariat réussi avec Bootstrap :

  1. Optez pour le natif : Dans un monde "zoneless", privilégiez les bibliothèques natives Angular comme ng-bootstrap ou ngx-bootstrap. Elles sont conçues pour fonctionner avec la détection de changements d'Angular, pas contre elle.
  2. Adoptez les Signaux : Utilisez l'API des Signaux pour gérer l'état de vos composants d'interface utilisateur. C'est la manière moderne et performante de gérer la réactivité dans Angular.
  3. Optimisez pour le SSR : Tirez parti des améliorations du SSR d'Angular 20. Assurez-vous que votre intégration Bootstrap est compatible avec des fonctionnalités comme l'hydratation incrémentielle.
  4. Restez léger : Angular 20 est synonyme de performance. Si vous n'avez pas besoin des fonctionnalités JavaScript de Bootstrap, envisagez d'utiliser uniquement la version CSS pour garder votre application légère.

Pour conclure

Associer Bootstrap à Angular 20 est un choix fantastique. Vous bénéficiez d'un framework de design puissant et familier et d'un moteur frontend de pointe. En adoptant les grands changements d'Angular 20 — les Signaux, l'architecture "zoneless" et les templates plus intelligents — vous pouvez créer des applications qui sont non seulement belles et responsives, mais aussi plus rapides et plus faciles à maintenir.

Que vous choisissiez une installation directe ou une bibliothèque native, l'astuce consiste à aligner votre approche sur la nouvelle architecture d'Angular 20. Suivez les conseils de ce guide, et vous serez sur la bonne voie pour créer des applications web étonnantes qui tirent le meilleur des deux mondes.