servicios inyeccion entre ejemplo diferencia dependencias javascript dependency-injection angularjs

javascript - inyeccion - servicios angular 4



AngularJS-Inyección de dependencia en servicios, fábricas, filtros, etc. (3)

Así que tengo algunos complementos y bibliotecas que quiero usar en mi aplicación angular y (actualmente) simplemente estoy haciendo referencia a esas funciones / métodos, ya que estaban destinados en el 99% de las aplicaciones de una manera que ignora completamente la inyección de dependencia.

Tengo (por ejemplo) la biblioteca javascript "MomentJS", que trata sobre el formato y la validación de fechas, y tengo usos para ella a través de mi aplicación en controladores, servicios y filtros. La forma en que he aprendido (usando AngularJS) es crear un servicio que haga referencia a la función (y sus métodos) e inyectar ese servicio en mis controladores, lo que funciona muy bien.

El problema es que realmente necesito hacer referencia a esta biblioteca en todos los diferentes tipos de componentes, desde servicios hasta filtros, controladores y todo lo demás. Entonces, supongo que mi pregunta es ¿cómo se hace la inyección de dependencia en filtros, servicios y todo lo demás que no es un controlador?

es posible? ¿Esto es incluso beneficioso?

Cualquier ayuda sería muy apreciada :)


En aras de la exhaustividad, aquí hay un ejemplo de servicio con inyección:

app.service(''<service>'', [''$http'', function($http) { this.foo = function() { ... } }]);


Sí, puede usar la inyección de dependencia para filtros y directivas

Ex:

Filtrar:

app.filter(''<filter>'', [''$http'', function(http){ return function(data){ } }]);

Directiva:

app.directive(''<directive>'', [''$http'', function(http){ return { .... } }]);

Servicio:

app.factory(''<service>'', [''$http'', function(http) { var shinyNewServiceInstance; return shinyNewServiceInstance; }]);


Si bien las respuestas ya existentes son correctas y funcionan, la guía de estilo angular de John Papas favorece el uso del servicio $inject en Y091 :

Filtrar:

app.filter(''<filter'', MyFilter); MyFilter.$inject = [''$http'']; function MyFilter() { return function(data) { } }

Directiva:

app.directive(''<directive>'', MyDirective); MyDirective.$inject = [''$http'']; function MyDirective() { return { ... } }

Fábrica:

app.factory(''<factory>'', MyFactory); MyFactory.$inject = [''$http'']; function MyFactory() { var shinyNewServiceInstance; return shinyNewServiceInstance; }

Servicio:

app.service(''<service>'', MyService); MyService.$inject = [''$http'']; function MyService() { this.foo = foo; function foo(){ ... } }