Je suis curieux de savoir ce que sont exactement les décorateurs dans AngularJS. Il n’ya pas beaucoup d’informations en ligne pour les décorateurs à part un texte de présentation dans la documentation AngularJS et une brève mention (bien que intéressante) dans un vidéo sur youtube .
Comme le Angular les gars ont dit un décorateur est:
Décoration de service, permet au décorateur d'intercepter la création d'instance de service. L'instance renvoyée peut être l'instance d'origine ou une nouvelle instance qui délègue à l'instance d'origine.
Je ne sais pas vraiment ce que cela signifie et je ne suis pas sûr de savoir pourquoi vous sépareriez cette logique du service lui-même. Par exemple, si je voulais retourner quelque chose de différent dans des conditions différentes, je passerais simplement des arguments différents aux fonctions concernées ou utiliserais une autre fonction partageant cet état privé.
Je suis toujours un peu un noob AngularJS, alors je suis sûr que c'est juste de l'ignorance et/ou des mauvaises habitudes que j'ai prises.
Un bon cas d'utilisation de $provide.decorator
est le moment où vous devez effectuer des modifications mineures sur un service tiers/en amont, dont dépend votre module, tout en laissant le service intact (car vous n’êtes pas le propriétaire/responsable du service). Ici est une démonstration sur plunkr.
Les décorateurs nous permettent de séparer les problèmes transversaux et aux services de préserver le principe de responsabilité unique sans se soucier du code "infrastructure".
Utilisations pratiques des décorateurs:
Dans tous ces cas, nous limitons le code du service à sa responsabilité principale.
decorator
peut intercepter une instance de service créée par factory, service, value, provider
, et vous donne la possibilité de modifier certaines instance(service)
qui ne sont autrement pas configurables/avec des options.
Il peut également fournir des exemples de maquette à des fins de test, par exemple $http
.
Dans Word simple, on peut dire qu’il s’agit d’une méthode d’extension. Pour ex. Nous avons une classe et elle a deux méthodes et au moment de l'exécution, nous voulons ajouter plus de méthode à celle-ci, puis nous utilisons Decorator.
Nous ne pouvons pas utiliser $ supply.decorator avec des constantes car nous ne pouvons pas changer les constantes qu’ils soulèvent en lecture seule.
En bref, les décorateurs peuvent être décrits comme suit: -
Une fonction de décorateur intercepte la création d'un service, ce qui lui permet de remplacer ou de modifier le comportement du service.
Il utilise le $provide
service par angular et modifie ou remplace la mise en oeuvre d'un autre service
$provide.decorator('service to decorate',['$delegate', function($delegate) {
// $delegate - The original service instance,
// which can be replaced, monkey patched,
// configured, decorated or delegated to.
// ie here what is there in the 'service to decorate'
// This function will be invoked,
// when the service needs to be provided
// and should return the decorated service instance.
return $delegate;
}]);
Exemple:
$provide.decorator('$log', ['$delegate', function($delegate) {
// This will change implementation of log.war to log.error
$delegate.warn = $delegate.error;
return $delegate;
}]);
Applications
En plus de @JBland répondre.