Plateformes

Comment ajouter un bandeau cookies à une application Angular

Dans un projet Angular CLI, collez la balise dans le head de src/index.html, la page que le build utilise pour chaque route, pas dans la liste scripts d’angular.json ni dans un composant. Marquez les balises de suivi dans le même fichier, et lisez le choix du visiteur dans un petit service qui écoute l’événement cq:consent de Cookiequiet ; n’envoyez les pages vues des changements de route sur NavigationEnd que lorsque la mesure d’audience est accordée.
Publié le 21 octobre 2026 · Par l’équipe Cookiequiet

Étapes

Copier la baliseDans le tableau de bord Cookiequiet, ajoutez le site et copiez la balise avec votre clé de site, data-consent-mode="1" et data-auto-block="1".
La coller dans src/index.htmlOuvrez src/index.html (le fichier désigné par l’option index d’angular.json) et collez la balise dans le head, avant tout autre script.
Marquer vos balisesCollez les balises de mesure d’audience et de publicité sous la balise Cookiequiet, avec type="text/plain" et data-cq-category réglé sur analytics ou marketing.
Ajouter un service de consentementCréez un service injectable qui garde les catégories accordées dans un signal, initialisé depuis window.Cookiequiet.get() et mis à jour sur l’événement cq:consent.
Conditionner contenus embarqués et pages vuesEntourez les contenus embarqués de blocs @if qui interrogent le service, et n’envoyez les pages vues sur l’événement NavigationEnd du routeur que lorsque la mesure d’audience est accordée.
Ajouter le lien Préférences de cookiesDans le composant de pied de page, ajoutez une ancre ordinaire avec href="#cq-preferences" et l’attribut data-cq-show-preferences.
Construire et testerLancez ng build ou ng serve, ouvrez l’application dans une fenêtre de navigation privée, cliquez sur Tout refuser et vérifiez qu’aucun cookie _ga ou _fbp n’est déposé. Acceptez tout, rechargez et consultez le registre des consentements.

Où placer la balise dans Angular ?

Angular CLI génère la page HTML de l’application à partir du fichier désigné par l’option index d’angular.json, par défaut src/index.html. Le build injecte ses propres scripts dans cette page : une balise que vous écrivez dans son head passe donc avant eux.

html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>MyApp</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cookiequiet.com/cq.js" data-site="YOUR_SITE_KEY" data-consent-mode="1" data-auto-block="1" defer></script>
</head>
<body>
<app-root></app-root>
</body>
</html>

Pourquoi pas l’option scripts d’angular.json ? Cette option prend des fichiers de votre projet et construit chacun d’eux en un bundle séparé, injecté par le CLI. La balise est un script distant dont les attributs portent les réglages : sa place est dans index.html, telle quelle. L’ajouter depuis un composant serait aussi trop tard : les composants s’exécutent après les balises de la page.

Comment bloquer mes balises jusqu’au consentement ?

Collez les balises de suivi sous la balise Cookiequiet dans src/index.html et modifiez la balise d’ouverture :

html
<script type="text/plain" data-cq-category="analytics" src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"></script>
<script type="text/plain" data-cq-category="analytics">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
</script>

Cookiequiet les exécute quand la mesure d’audience est accordée, et d’emblée lors des visites suivantes où le choix enregistré l’inclut. Le guide Google Analytics 4 couvre l’alternative du Consent Mode, et le guide sur le blocage des scripts couvre les autres balises. Les scripts qu’une bibliothèque crée à l’exécution sont retenus par le bloqueur automatique quand ils viennent de l’un des quelque 80 traceurs qu’il connaît.

Comment le code Angular lit-il le choix ?

Cookiequiet émet un événement cq:consent sur window chaque fois qu’il applique un choix : un choix enregistré au chargement, un nouveau choix après un clic, et toutes les catégories dans les régions où le ciblage géographique n’affiche pas le bandeau. event.detail.categories liste les catégories accordées ; window.Cookiequiet.get() renvoie le choix en vigueur (catégories dans c, a: "geo" là où aucun bandeau n’est affiché) ou null tant qu’aucun choix ne s’applique. Un service construit sur un signal :

ts
// src/app/consent.service.ts
import { Injectable, signal } from "@angular/core";
​
@Injectable({ providedIn: "root" })
export class ConsentService {
readonly granted = signal<string[]>((window as any).Cookiequiet?.get()?.c ?? []);
​
constructor() {
window.addEventListener("cq:consent", (e) =>
this.granted.set((e as CustomEvent).detail.categories),
);
}
​
has(category: string): boolean {
return this.granted().includes(category);
}
​
openPreferences(): void {
(window as any).Cookiequiet?.showPreferences();
}
}

Dans un template :

html
@if (consent.has('marketing')) {
<iframe src="https://www.youtube-nocookie.com/embed/VIDEO_ID" title="Video"></iframe>
} @else {
<button (click)="consent.openPreferences()">Allow videos</button>
}

Avec le rendu côté serveur, window n’existe pas sur le serveur : ne créez l’écouteur que dans le navigateur, par exemple derrière isPlatformBrowser.

Et les changements de route ?

Le routeur Angular change de vue sans recharger la page. La balise s’exécute une fois par chargement complet, le choix reste appliqué et le bandeau ne réapparaît pas. Les scripts marqués sont activés au chargement et après chaque choix : gardez-les donc dans index.html. Pour les pages vues par route, écoutez NavigationEnd :

ts
const consent = inject(ConsentService);
inject(Router).events
.pipe(filter((e): e is NavigationEnd => e instanceof NavigationEnd))
.subscribe((e) => {
if (consent.has("analytics")) sendPageView(e.urlAfterRedirects); // votre appel de mesure d’audience
});

Comment ajouter le lien Préférences de cookies ?

html
<a href="#cq-preferences" data-cq-show-preferences>Cookie preferences</a>

Cookiequiet gère les clics sur ce lien partout dans la page. Gardez un simple href, pas un routerLink.

Comment tester ?

  1. Lancez ng build et servez le résultat, ou ng serve, puis affichez le code source de la page : cq.js est dans le head, avant les scripts du CLI.
  2. Ouvrez l’application dans une fenêtre de navigation privée et cliquez sur Tout refuser : les cookies sont cq_consent et les vôtres.
  3. Effacez les cookies, cliquez sur Tout accepter, rechargez : les balises marquées s’exécutent. Naviguez et vérifiez les pages vues.
  4. Ouvrez le registre des consentements dans le tableau de bord.

Une Content Security Policy doit autoriser https://cookiequiet.com dans script-src et connect-src. Cookiequiet est gratuit pour un site, ciblage géographique compris ; Starter coûte 3 € par site et par mois, avec des pages vues illimitées.

Questions

Non. Cette option regroupe des fichiers de votre projet au moment du build. La balise est un script distant dont les attributs data portent les réglages, et elle doit passer avant vos autres balises : collez-la dans src/index.html.
Non. Le routeur change de vue dans le même document : le script s’exécute une fois par chargement complet de page et le choix enregistré reste appliqué.
Injectez un service qui garde les catégories accordées dans un signal, initialisé depuis window.Cookiequiet.get() et mis à jour sur l’événement cq:consent, et interrogez-le dans le template avec un bloc @if.
Oui. La balise dans index.html est servie avec la page rendue et s’exécute dans le navigateur. Seul le code qui touche à window, comme l’écouteur du service de consentement, doit s’exécuter uniquement dans le navigateur.

Mettez un bandeau discret sur votre site dès aujourd’hui

Gratuit pour un site avec toutes les fonctions essentielles, sans carte ni période d’essai qui expire. Passez un site en Starter pour €3 par mois pour le mettre à vos couleurs par IA sans la mention Cookiequiet, ou en Pro pour €9 pour le concevoir avec l’agent IA.