web-dev-qa-db-ja.com

angularJSの別のサービスにサービスを注入する

AngularJSで1つのサービスを別のサービスに注入することは可能ですか?

81
Edgar Martinez

はい。 angularjsの通常の注入ルールに従ってください。

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

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

@simonに感謝します。配列のインジェクションを使用して、問題の最小化を回避することをお勧めします。

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

はい。このように(これはプロバイダーですが、同じことが当てはまります)

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


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

この例では、$dbはアプリの他の場所で宣言され、プロバイダーの$get関数に挿入されるサービスです。

8
Pauli Price

混乱を避けるために、childServiceで他のサービス($ http、$ cookies、$ stateなど)を使用している場合は、それらを明示的に宣言する必要があることにも言及する価値があると思います。

例えば.

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

}());

配列内で子の内部で使用しているサービスを宣言すると、自動的に注入されるか、$ injectアノテーションを使用して個別に注入できます。

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