2013-12-18 3 views
1

AngularJS와 서비스에 대한 문서를 읽는 동안, 나는 같이 작성 예를 들어, 서비스 전반에 걸쳐 발견했습니다 :이 서비스 내에서 참조 할 수 있도록 $http가 서비스 래퍼로 주입주입 종속성

myApp.service('fooGetter', ['$http', function($http) { 
    this.getFoo = function() { 
     // use $http to get some foo 
    } 
}]); 

생성 된 인스턴스입니다. 함수 매개 변수에서 복제되는 매개 변수 목록을 포함하는 배열 구문의 이유는 무엇입니까? 나는 그 목적에 대한 좋은 설명, 규칙, 그리고 왜 그것이 필요한지를 찾을 수 없었다. 그것없이 쓰여진 동일한 서비스는 다음과 같습니다 :

myApp.service('fooGetter', function($http) { 
    this.getFoo = function() { 
     // use $http to get some foo 
    } 
}); 

이 변수에 대한 완벽하게 정밀한 자동 참조가있는 것 같습니다.

답변

5

삽입 된 종속성을 포함하는 배열이없는 구문을 사용하는 경우 각도는 함수에 인수를 읽기 위해 반사를 사용합니다. 이 정상적으로 잘 작동하지만 코드를 축소하려는 경우 인수가 이름을 변경하고 각도가 작동을 멈 춥니 다. 배열 구문 표기법을 사용하면 인수 이름이 바뀌더라도 angle이 올바른 종속성을 계속 찾을 수 있습니다.

또한 삽입 된 서비스의 이름이 너무 긴 경우 배열 구문을 사용하여 주입 할 수 있으며 함수 인수 목록에서 사용하기 쉬운 이름을 지정할 수 있습니다.

예 :

app.controller("MyCtrl", ["MyReallyLongUserServiceName", function(User) { 
    User.doSomething(); 
}]); 
+0

알겠습니다. 고마워요! 대답을 수락하지만 몇 분 기다려야 만 ... – chinabuffet

3

당신이 주사가 여전히 작동, 그래서 당신의 JS 코드를 축소하세요하려는 경우이 배열 구문이 필요합니다. 실제로 minifier는 익명 함수의 인수 이름을 변경하고 각도 함수는 함수에 주입 할 항목을 알기 위해이 이름을 사용합니다. 이 대체 구문은 인수 이름을 문자열로 정의하여이 문제를 해결합니다.이 문자열은 minifier가 처리하지 않습니다.

공식 문서 page about dependency injection에 설명되어 있습니다.

+0

분명히 그걸 지적 해 주셔서 감사합니다. – chinabuffet