10.1 — Data API vs API programmatique
⏱️ TL;DR — Deux manières d’activer un composant JS. La Data API : des attributs
data-bs-toggle/data-bs-targetdéclenchent tout, sans écrire de JS. L’API programmatique : vous instanciez le composant (new bootstrap.Modal(el)) et appelez ses méthodes (.show(),.hide(),.toggle(),.dispose()). Choisissez selon que l’interaction est déclarative ou pilotée par votre code.
🎯 Objectifs
- Déclencher un composant par data-attributes.
- L’instancier et le contrôler en JS.
- Récupérer une instance existante.
Data API (déclaratif)
<button data-bs-toggle="modal" data-bs-target="#m">Ouvrir</button>
<div class="modal" id="m">…</div>Aucune ligne de JS : Bootstrap écoute les clics sur les [data-bs-toggle] et agit. Idéal pour les cas simples.
API programmatique (impératif)
// créer une instance
const modalEl = document.getElementById('m')
const modal = new bootstrap.Modal(modalEl, { backdrop: 'static' })
// piloter
modal.show()
modal.hide()
modal.toggle()
// nettoyer (important en SPA)
modal.dispose()Utile quand votre code décide (après un fetch réussi, une validation, un timer…).
Récupérer une instance existante
// renvoie l'instance déjà créée, ou null
const instance = bootstrap.Modal.getInstance(modalEl)
// renvoie l'instance, ou en crée une
const instance2 = bootstrap.Modal.getOrCreateInstance(modalEl)Évite de créer deux instances sur le même élément (source de bugs).
Options
Les options se passent à la construction, ou en data-bs-* :
<div class="modal" data-bs-backdrop="static" data-bs-keyboard="false">…</div>équivaut à new bootstrap.Modal(el, { backdrop: 'static', keyboard: false }).
⚠️ Piège — Instancier deux fois le même élément (une fois par la Data API au clic, une fois par votre
new bootstrap.Modal) crée des comportements en double. UtilisezgetOrCreateInstancepour récupérer l’instance existante.
💡 Pour un dev React — La Data API attache des écouteurs au chargement du DOM ; en React, les éléments apparaissent/disparaissent dynamiquement, ce qui casse ce modèle. Préférez l’API programmatique dans un
useEffect(avecdispose()au cleanup), ou carrémentreact-bootstrap. Voir Partie 11.
✏️ Exercices
- Ouvrir une modale après un fetch réussi.
✅ Solution
const modal = bootstrap.Modal.getOrCreateInstance('#m')
await fetch(...); modal.show()- Éviter de créer deux instances sur le même élément.
✅ Solution
Utiliser bootstrap.Modal.getOrCreateInstance(el).
🧠 Quiz de révision
1. Qu’est-ce que la Data API ?
Le déclenchement des composants par attributs data-bs-*, sans écrire de JS.
2. Comment ouvrir une modale en JS ?
new bootstrap.Modal(el).show().
3. Comment récupérer une instance existante ?
bootstrap.Modal.getInstance(el) (ou getOrCreateInstance).
4. À quoi sert .dispose() ?
.dispose() ?Détruire l’instance et nettoyer ses écouteurs (utile en SPA).
5. Où passer les options d’un composant ?
Au constructeur, ou en attributs data-bs-*.
Chapitre suivant : 10.2 — Les événements