Service-Ergebnisse veränderen mit Decorators
Problem
Du benutzt ein externes Modul und möchtest das Ergebnis eines Services mit Decorators verändern oder erweitern, ohne den Service selbst zu verändern.
Lösung
💡 Keine Lust zu lesen?
Nicht jeder lernt am besten aus Büchern und Artikeln. Lernen darf interaktiv sein und Spaß machen. Wir bieten dir auch Angular Intensiv-Schulungen an, um dich möglichst effektiv in das Thema Angular zu begleiten. Im Kurs kannst du die Fragen stellen, die du nur schlecht googeln kannst, z.B. "Besserer Weg, um meine Applikation zu strukturieren?". Wir können sie dir beantworten.
- ✔ Öffentliche Termine verfügbar
- ✔ Vor Ort, als auch Remote
- ✔ Deutsch/Englisch möglich

Zur Lösung schreiben wir einen Decorator. Dieser kann Aufrufe zu Services (Provider, Factory, Service, Value) abfangen und der Ergebnis verändern. In diesem Beispiel dekorieren wir den $log-Service und stellen das aktuelle Log-Level vor die Ausgabe.
Ein Decorator kann nur in einem Config-Block initialisiert werden. Dies führt zu einigen Einschränkungen - z.B. ist es nicht möglich, andere Services zu injizieren.
Um den Decorator zu erstellen, benutzen wir den $provide-Service, welcher die Methode .decorator() enthält. In den Decorator wird automatisch der dekorierte Service als $delegate injiziert. In diesem Fall ist $delegate also $log.
Wir möchten das Verhalten unseres Log-Services nicht verändern. Deshalb erstellen wir ein neues Objekt und stellen alle Methoden bereit, die der originale $log-Service bietet.
.config(function($provide) {
$provide.decorator('$log', function($delegate) {
var logger = {};
[[cta:training-bottom]]
['log','info','warn','error','debug'].forEach(function(level) {
logger[level] = function(message) {
$delegate[level]('[' + level.toUpperCase() + '] ' + message);
};
});
return logger;
});
}) Sascha Brink
Gründer von Angular.DE
Überzeugter Webentwickler und seit über 15+ Jahren im IT-Umfeld tätig.
Sascha betreut regelmäßig Angular-Projekte und unterstützt Firmen bei der Ausbildung ihrer Mitarbeiter. Im Jahr 2013 hat er die Platform AngularJS.DE gestartet um das Framework in Deutschland bekannter zu machen. Sascha gibt Angular- und JavaScript-Schulungen auf deutsch und englisch.
Werde Teil unserer Community
Seit 2013 bieten wir Tutorials, Artikel und Schulungen rund um Angular. Mit 18 Meetups und über 10.000 Entwickler:innen sind wir die größte Angular-Community in Europa.
Jetzt beitretenWeitere Artikel
Service, Factory und Provider verstehen
Was ist der Unterschied? Wann brauch ich was? In diesem Artikel werden alle Wege zum Erzeugen von Services gezeigt und praktische Tipps gegeben.
Was sind Angular und AngularJS?
Was sind die Unterschiede zwischen Angular und AngularJS?
Migration AngularJS zu Angular
Migration mit ngUpgrade leichtgemacht. Eine Zusammenfassung über alle wichtigen Schritte, wie ihr eure AngularJS App zu einer Angular App migrieren könnt.