Tengo curiosidad por saber qué son exactamente los decoradores en AngularJS. No hay mucha información en línea para los decoradores, excepto por una propaganda en la documentación de AngularJS y una breve (aunque interesante) mención en un video de YouTube .
Como dicen los chicos de Angular, un decorador es:
Decoración del servicio, permite al decorador interceptar la creación de la instancia del servicio. La instancia devuelta puede ser la instancia original o una nueva instancia que delegue a la instancia original.
Realmente no sé qué significa eso , y no estoy seguro de por qué separarías esta lógica del servicio en sí. Por ejemplo, si quisiera devolver algo diferente en diferentes condiciones, simplemente pasaría diferentes argumentos a las funciones relevantes o usaría otra función que comparta ese estado privado.
Todavía soy una especie de novato de AngularJS, así que estoy seguro de que es solo ignorancia y / o malos hábitos lo que aprendí.
fuente
Los decoradores nos permiten separar las preocupaciones transversales y permiten que los servicios preserven el principio de responsabilidad única sin preocuparse por el código de "infraestructura".
Usos prácticos de decoradores:
En todos estos casos, limitamos el código del servicio a su responsabilidad principal.
fuente
decorator
puede interceptar la instancia de servicio creada porfactory, service, value, provider
, y brinda las opciones para cambiar algunainstance(service)
que de otro modo no sería configurable / con opciones.También puede proporcionar instancias simuladas para fines de prueba, por ejemplo
$http
.fuente
directive
definiciones presentadas por Ben NadelEn palabras simples, podemos decir que es como un método de extensión. Por ej. Tenemos una clase y tiene dos métodos y en el tiempo de ejecución queremos agregar más métodos y luego usar Decorator.
No podemos usar $ provide.decorator con constantes porque no podemos cambiar las constantes que están cargando la propiedad de solo lectura.
fuente
En resumen, los decoradores se pueden describir de la siguiente manera:
Utiliza el
$provide
servicio por angular y modifica o reemplaza la implementación de otro servicioEjemplo:
Aplicaciones
Además de la respuesta @JBland.
Configuración de configuración regional amplia de la aplicación: -
Puedes encontrar un ejemplo aquí
Changiging comportamiento predeterminado e implementación existente de un servicio por servicio angular: -
Puedes encontrar un ejemplo aquí
Cambio de comportamiento de una función en diferentes entornos.
fuente