A

Angular Integration

Service und Module fuer Angular 14+ Projekte.

Installation

npm install @breakpilot/consent-sdk

Module Setup

app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ConsentModule } from '@breakpilot/consent-sdk/angular';
import { environment } from '../environments/environment';

@NgModule({
  imports: [
    BrowserModule,
    ConsentModule.forRoot({
      apiEndpoint: environment.consentApi,
      siteId: 'my-site',
      debug: !environment.production,
    }),
  ],
})
export class AppModule {}

Standalone Setup (Angular 15+)

app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideConsent } from '@breakpilot/consent-sdk/angular';
import { environment } from '../environments/environment';

export const appConfig: ApplicationConfig = {
  providers: [
    provideConsent({
      apiEndpoint: environment.consentApi,
      siteId: 'my-site',
      debug: !environment.production,
    }),
  ],
};

Service Usage

components/analytics.component.ts
import { Component, OnInit } from '@angular/core';
import { ConsentService } from '@breakpilot/consent-sdk/angular';

@Component({
  selector: 'app-analytics',
  template: `
    <div *ngIf="hasAnalyticsConsent$ | async">
      <!-- Analytics Code hier -->
    </div>
  `,
})
export class AnalyticsComponent implements OnInit {
  hasAnalyticsConsent$ = this.consentService.hasConsent$('analytics');

  constructor(private consentService: ConsentService) {}

  async loadAnalytics() {
    if (await this.consentService.hasConsent('analytics')) {
      // Load analytics
    }
  }
}

Cookie Banner Component

components/cookie-banner.component.ts
import { Component } from '@angular/core';
import { ConsentService } from '@breakpilot/consent-sdk/angular';

@Component({
  selector: 'app-cookie-banner',
  template: `
    <div
      *ngIf="isBannerVisible$ | async"
      class="fixed bottom-0 inset-x-0 bg-white border-t shadow-lg p-4 z-50"
    >
      <div class="max-w-4xl mx-auto flex items-center justify-between">
        <p class="text-sm text-gray-600">
          Wir verwenden Cookies um Ihr Erlebnis zu verbessern.
        </p>
        <div class="flex gap-2">
          <button (click)="rejectAll()" class="px-4 py-2 border rounded">
            Ablehnen
          </button>
          <button (click)="showSettings()" class="px-4 py-2 border rounded">
            Einstellungen
          </button>
          <button (click)="acceptAll()" class="px-4 py-2 bg-blue-600 text-white rounded">
            Alle akzeptieren
          </button>
        </div>
      </div>
    </div>
  `,
})
export class CookieBannerComponent {
  isBannerVisible$ = this.consentService.isBannerVisible$;

  constructor(private consentService: ConsentService) {}

  async acceptAll() {
    await this.consentService.acceptAll();
  }

  async rejectAll() {
    await this.consentService.rejectAll();
  }

  showSettings() {
    this.consentService.showSettings();
  }
}

ConsentGate Directive

template.html
<!-- Zeigt Element nur wenn Consent vorhanden -->
<iframe
  *consentGate="'social'"
  src="https://www.youtube.com/embed/VIDEO_ID"
  width="560"
  height="315"
></iframe>

<!-- Mit Custom Fallback -->
<div *consentGate="'analytics'; else noConsent">
  <app-analytics-dashboard></app-analytics-dashboard>
</div>
<ng-template #noConsent>
  <div class="bg-gray-100 p-4 rounded-lg text-center">
    <p>Bitte stimmen Sie Statistik-Cookies zu.</p>
    <button (click)="showSettings()">Einstellungen</button>
  </div>
</ng-template>

Service API

Property/MethodTypBeschreibung
consent$Observable<ConsentState>Observable des aktuellen Consent
hasConsent$()Observable<boolean>Reaktive Consent-Pruefung
hasConsent()Promise<boolean>Async Consent-Pruefung
isBannerVisible$Observable<boolean>Banner-Sichtbarkeit
acceptAll()Promise<void>Akzeptiert alle
rejectAll()Promise<void>Lehnt alle ab
setConsent()Promise<void>Setzt spezifische Kategorien