2014-10-22 2 views
0

여러 각도 컨트롤러에서 사용되는 종속성을 추상화하는 방법이 있는지 궁금합니다. $scope, $rootScope, $routeParams$http 모두 내 StudentCtrlTeacherCtrl 걸릴 장점은, 방법은 어떤 종류의 패키지로이 밖으로 추상적으로 존재하는 경우Angular JS Refactor 컨트롤러 종속성 삽입

예를 들어, standardDependencies 말을하고 대신 두 컨트롤러에 standardDependencies을 주입 공유 된 모든 것을 작성하는 것?

ex.

app.controller('StudentCtrl', ['standardDependencies', function(standardDependencies){ 

}]); 

나는이 난 그냥 $scope처럼 만 사용자 정의 기능을 일을 주입하기위한 예제를 보지 않은에 대한 서비스는 일반적으로 사용되는 것을 알고 있습니다.

답변

2

컨트롤러마다 다를 수 있으므로 $scope에 대해서는이 작업을 수행 할 수 없습니다.

실제 싱글 같은 서비스는, 그래, 당신은 기술적으로 다른 서비스로 마무리 할 수 ​​:

app.service('standardDependencies', ['$rootScope', ..., function($rootScope, ...) { 
    this.$rootScope = $rootScope; 
    ... 
}}]); 

그러나 나는 그렇게 할 좋은 이유가 표시되지 않습니다. StudentCtrlTeacherCtrl이 실제로 비슷한 경우 아마도 공통 기능을 포함하는 PersonService과 같은 것에 의존해야합니다.

+0

이것은 물결 무늬가있는 예였습니다. 저는 16 개의 컨트롤러를 가지고 있고 그것들은 모두 ~ 6 개의 의존성을 가지고 있습니다 ('$ rootScope, $ rootParams, $ location, $ http, $ translate'); 나는 리팩터링하는 방법이 있는지 궁금해서 그렇게 똑같은 dependecies 16+ 번을 타이핑하지는 않을 것이다. – kittyminky

-1

일종의 공급자를 사용하십시오. 그러나 각도 다이제스트 사이클이 이러한 참조를 관리하기 어려울 수 있으므로 이는 그리 좋은 방법이 아닙니다. 이는 의존성 주입에 대한 모범 사례에 위배됩니다.

범위에서 종속성에 액세스하려면 a) 범위의 적절한 상속 또는 b) 기본 주입 만 수행하십시오.

도움이 되었기를 바랍니다. : D

0

이것은 아마도 나쁜 습관이지만 app.js의 맨 위에 배열 standardDependencies을 정의한 다음 array.concat을 사용할 수 있습니다.

예컨대 :

// app.js 
standardDependencies = ['$rootScope', '$rootParams', '$location', '$http', '$translate'] 

// controller.js 
app.controller('StudentCtrl', standardDependencies.concat(['$q', '$log', etc, 
    function($rootScope, ..., $log){ ... }]); 

당신은 여전히 ​​함수 매개 변수로를 나열해야하지만, 적어도 한 번 매개 변수로, 한 번 문자열로, 그들을 두 번 나열 할 필요가 없습니다.