2013-10-13 4 views
1

나는 여기서 angularJS 멍청이 다. 나의 이해에 기초하여, 나는 의존성을 주입 할 수있는 두 곳이있다.AngularJS Dependency Injection 어디에서 지정해야합니까?

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT]) 
.controller('HomeController', function(B: $hereIsAnotherPlace){ 

}); 

내가 맞습니까? 그렇다면 차이점은 무엇입니까?

+2

'ONE PLACE TO DO IT'는 실제로 모듈을 추가하는 곳입니다. – SET

답변

1

실제로는 여기에 예입니다.

var helperModule = angular.module('helperModule', []); 

var pageModule = angular.module('pageModule', ['helperModule']); 

pageModule 지금이

function(B: $hereIsAnotherPlace){ ... 

를 지정 & 지침은 .. 등 helperModule

어디에 연결된 모든 서비스에 액세스하는 자바 스크립트가 있지만 당신이 서비스를 주입 어디있다 유효하지 않습니다.

다음은 서비스를 삽입 할 수있는 두 가지 방법입니다.

.controller('myController', function($myService) { ... }); 

또는 사용할 소형 코드입니다.

.controller('myController', ['$myService', function($myService) { ... }]); 

은 후자의 예에서 당신은 당신이 좋아하는 무엇이든에 arguments$myService의 이름을 변경할 수 있습니다.

빠른 예

.controller('myController', ['$myService', function($thisIsEqualTo$myService) { ... }]); 

그래서 그들은 순서대로 전달됩니다 당신이 그들을 필요로하는 어떤 마지막이 예를의 당신이 주사를 지정하는 배열을 사용할 때 인수가 이름을 지정할 수 있습니다, 동일 정렬.

+0

'당신이 원하는대로 인수에서 $ myService의 이름을 변경할 수 있습니다. '라는 말에 대해 더 자세히 설명 할 수 있습니까? – denniss

+0

예, 이제 업데이트하겠습니다. – iConnor

0

A는 모듈을 만들 때만 사용되며 앱에서 한 번만 사용해야합니다.

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT]); 

B는 그렇지 않은 경우에는 새로운 모듈을 만드는 것보다하여 이미 생성하여 다시

angular.module('myApp') 
.controller('HomeController', function(B: $hereIsAnotherPlace){ 

}); 

... 컨트롤러에 분사하는 분사 아니오 없다.

2

예제에서 A는 의존성 주입 (DI)보다는 모듈을 지정할 수있는 곳입니다. 다음은, 코드의 변화 주소 :

.controller('HomeController', [A , function(B) {}]); 

두 번째 (B)가 필요를, 최초의 (A)는 선택 사항입니다 (하지만 혜택은 아래에서 설명하고있다). 여기

는 각 문서에서 불과 두 번째 (B)를 사용의 예 :

function MyController($scope, greeter) {...}' 

그러나 자바 스크립트 사용해 minifier 및 예를 들어, 매개 변수 이름을 변경하고 각도 예상하므로 그 방법을 깰 수 난독에 $ 범위 정확하게 $ scope (그리고 minifier는 파일을되도록 작게 줄이기 위해 가능한 한 작은 것으로 매개 변수의 이름을 바꾸는 것을 좋아한다)라는 이름을 지어야한다.

한 가지 방법은, 다른 사람의 사이에, 즉 인라인 주석입니다 주위 :

someModule.factory('greeter', ['$window', function(renamed$window) {...}]); 

(다시 각 문서에서). 이것은 minifers/..가 문자열 리터럴을 변경하지 않으므로 문제를 해결합니다. 그리고 각진은 그 문자열 이름을 가진 서비스를 함수 내에서 매치 된 매개 변수에 주입하는 것을 알고 있습니다. 그래서 그 매개 변수 이름은 minifier에 의해 무엇이든 변경 될 수 있으며, 모든 것은 문자열/매개 변수 목록 내의 서비스 위치 (첫 번째 문자열이 첫 번째 매개 변수와 일치 함 등)뿐입니다. 더 의존성 주입에 많이 들어

: 다른 모듈에 다른 모듈을 삽입 할 수있는 당신이 "여기 한 가지 장소입니다"를 지정 http://docs.angularjs.org/guide/di