2017-06-05 27 views
0

目前我正在試圖重構遵循最佳實踐和JohnPapa的風格指南,這意味着,除其他事項外,我應該從setTimeoutsetInterval切換到$timeout,對我們公司的一切$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'一個對象,你可以創建一個工廠,注入所有這些和返回對象你現在正在分配'baseServices' – tanmay

+0

@tanmay其實這就是我寫這個問題時的想法! (它總是一樣的......)但是這不是「髒」嗎?如果沒有更好的辦法,我會這樣做,但我想知道是否有更清潔/可接受的方式 –

+0

我寧願隨着一次性的過程而疲憊不堪。但如果你完全注入了大量注射劑,這將是最清潔的可能的方式AFAIK – tanmay

回答

1

也許你可以使用一個工廠把所有這些服務,從您的控制器使用它

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

如上所述,在我寫這個問題時,我的腦海裏實際上已經突然出現了,但我想也許有人會有更好的方式來做到這一點 - 或者更有「角度」的方式來做到這一點。但是,如果是這樣,那麼我會和這一起去,謝謝! –