2017-06-05 6 views
0

私は現在、ベストプラクティスとJohnPapaのスタイルガイドに従い、当社のすべてをリファクタリングしようとしています。つまり、setTimeoutから$timeoutsetIntervalに切り替えるはずです。 $intervalなど角型サービスをまとめて複数のコントローラに注入する

しかし、私はそれが毎回これらのサービスを注入しなければならないのは、疲れて、厄介で、直感に反していることがわかります。この結果、コントローラの宣言が繰り返し繰り返され、要素の半分が役に立たず、明白になります。

angular.module('myModule',[]) 
    .controller('MyController', ['$scope', '$http', '$timeout', '$interval', MyController]) 
    .controller('MyController2', ['$scope', '$http', '$timeout', '$interval', MyController2]) 
    .controller('MyController3', ['$scope', '$http', '$timeout', '$interval', MyController3]) 

私はこの醜いと維持する痛みを見つける;これが私がいつもsetTimeoutよりも$timeoutを好む理由ですが、今私は改善しようとしています。

サービスを "一括注入"する方法はありますか?以下のような例を何かのために

var baseServices = { 
    http: $http, 
    scope: $scope, 
    timeout: $timeout, 
    interval: $interval, 
}; 

angular.module('myModule',[]) 
    .controller('MyController', ['baseServices', MyController]) 
    .controller('MyController2', ['baseServices', MyController2]) 
    .controller('MyController3', ['baseServices', MyController3]) 

var MyController = function(baseServices){ 
     baseServices.$timeout(...); 
} 

これはリモートで可能なものですか?

+0

からそれを使用することができ、あなたはすべてのそれらを注入し、オブジェクトを返すファクトリを作成することができますあなたは現在 'baseServices'に割り当てています – tanmay

+0

@tanmay実際には、私はその質問を書いていたと思いました! (それはいつも同じです...)しかし、それは "汚い"ではないでしょうか?より良い方法がない場合は、私はそれを行うだろうが、私はクリーナー/受け入れられた方法があるかどうか疑問に思っていた –

+0

私はむしろ一度のプロセスを疲れて行くだろう..しかし、あなたが完全に大量注入には、 AFAIK – tanmay

答えて

1

たぶん、あなたはグループにすべてのこれらのサービスをファクトリを使用して、代わりに `baseServices`のためだけにオブジェクトのコントローラー

angular.module('myModule',[]) 
    .controller('MyController', ['baseServices', MyController]) 
angularApp.factory('baseServices', baseServices); 
function baseServices ($scope, $http, $timeout, $interval) { 
     return { 
      scope: $scope, 
      http: $http, 
      timeout: $timeout, 
      interval: $interval 
     }; 
} 
+0

上記のように、私はこの質問を書いていたときに実際に私の頭の中に突っ込んできましたが、誰かがより良いやり方をするかもしれないと思ったのです。しかし、それがあれば、私はこれで行くだろう、ありがとう! –

関連する問題