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(){
...
}
}