Inyectando un servicio en otro servicio en angularJS


Respuestas:


118

Si. siga la regla de inyección regular en angularjs.

app.service('service1', function(){});

//Inject service1 into service2
app.service('service2',function(service1){});

Gracias a @simon. Es mejor usar la inyección Array para evitar problemas de minificación.

  app.service('service2',['service1', function(service1) {}]);

20
Sugiero usar la forma de inyección de matriz para evitar problemas cuando desee minimizar sus scripts en el futuro:['service1', function(service1) {}]
— Simon Belanger

2
También puede utilizar una ngmintarea gruñida asociada.
— John Ledbetter

si quisiera acceder a otro método desde el mismo servicio, supongo que no querría inyectar el mismo servicio en el servicio; Sin embargo, intentar llamarlo usando 'esto' no parece funcionar para mí, ¿alguna idea sobre cuál es la mejor manera de hacerlo? ¡Gracias!
— timhc22

Me pregunto qué pasa si inyecta 'service1' en 'service2', y también inyecta 'service2' en 'service1', ¿qué pasará entonces? ¿Qué pasa si la inicialización de un servicio depende de la inicialización del otro servicio?
— Xinan

@Xinan en ese caso, angularjs arrojará un error de dependencia cíclica. Así que evítelo y de todos modos esa no es una buena práctica de programación.
— jitenagarwal19

8

Si. Así (este es un proveedor, pero se aplica lo mismo)

    module.provider('SomeService', function () {


    this.$get = ['$q','$db','$rootScope', '$timeout', 
                function($q,$db,$rootScope, $timeout) {
          return reval;
    }
    });

En este ejemplo, $dbes un servicio declarado en otra parte de la aplicación e inyectado en la $getfunción del proveedor .


5

Para evitar cualquier confusión, creo que también vale la pena mencionar que si está utilizando cualquier otro servicio (por ejemplo, $ http, $ cookies, $ state) en su childService, entonces también debe declararlos explícitamente.

p.ej

function() {
  var childService = function($http, $cookies, parentService) {

  // Methods inherited
  this.method1Inherited = parentService.method1();
  this.method2Inherited = parentService.method2();

  // You can always add more functionality to your child service

  angular.module("app").service("childService", ["$http", "$cookies", "parentService", childService]);

}());

Puede declarar los servicios que está utilizando dentro de su hijo en una matriz y luego se inyectan automáticamente, o inyectarlos por separado con la anotación $ inject:

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.