angleJSの別のサービスにサービスを挿入する


回答:


118

はい。anglejsの通常のインジェクションルールに従います。

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

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

@simonに感謝します。問題の縮小を避けるために、アレイインジェクションを使用することをお勧めします。

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

20
将来スクリプトを縮小したい場合は、問題を回避するために配列インジェクションの方法を使用することをお勧めします。– ['service1', function(service1) {}]
Simon Belanger

2
ngmin不平を言うタスクを使用することもできます。
John Ledbetter 2014年

同じサービスから別のメソッドにアクセスしたい場合は、同じサービスをサービスに注入したくないと思います。'this'を使用してそれを呼び出そうとすると、私にはうまくいかないようですが、それを行うための最良の方法について何か考えはありますか?ありがとう!
timhc22 2014年

「service1」を「service2」に注入し、「service2」を「service1」に注入するとどうなるでしょうか。一方のサービスの初期化が他方のサービスの初期化に依存している場合はどうなりますか?
xinan 2016

その場合、@ Xinanはangularjsが循環依存のエラーをスローします。だからそれを避けてください、そしてとにかくそれは良いプログラミング慣行ではありません。
jitenagarwal19 2016

8

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

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


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

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


5

混乱を避けるために、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 );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.