web-dev-qa-db-fra.com

Injecter un service dans un autre service dans angularJS

Est-il possible d'injecter un service dans un autre service angularJS?

81
Edgar Martinez

Oui. suivez la règle d'injection régulière en angularjs.

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

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

Merci à @ simon. Il est préférable d'utiliser l'injection de matrice pour éviter le problème de minimisation.

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

Oui. Comme ceci (c'est un fournisseur, mais la même chose s'applique)

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


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

Dans cet exemple, $db est un service déclaré ailleurs dans l'application et injecté dans le fournisseur $get une fonction.

8
Pauli Price

Afin d'éviter toute confusion, je pense qu'il est également utile de mentionner que si vous utilisez d'autres services (par exemple, $ http, $ cookies, $ state) dans votre service enfants, vous devez également les déclarer explicitement.

par exemple.

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]);

}());

Vous pouvez soit déclarer les services que vous utilisez dans votre enfant dans un tableau, puis ils sont injectés automatiquement, soit les injecter séparément avec l'annotation $ inject:

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
5
Tiberiu Oprea