2013-08-21 4 views
0

와 기본 AngularJS와 컨트롤러를 정의 및 jsfiddle와 함께 연주, 나는 컨트롤러는 다음과 같은 방법 *에 정의 된 (그리고 작업)중인 나타났습니다 내 컨트롤러를 호출하는 AngularJS 라이브러리 : 예상되는 서비스와 내 컨트롤러가 예상하는 서비스를 어떻게 알 수 있습니까?문서를 통해 읽기 서비스

JavaScript, Jim,하지만 우리가 알고있는 것은 아닙니다. Angular's dev guide에서

*bearing in mind that controllers shouldn't be defined in the global scope

답변

1

:

어떻게 인젝터 주입 할 필요가 어떤 서비스 알고 있나요?

(...)

유추 종속성

의존성의 보류를 얻을 수있는 가장 간단한 방법은, 함수 매개 변수 이름은 종속의 이름이 있다고 가정하는 것입니다.

함수 MyController에 ($ 범위, 인사 프로그램) {...} 서비스의 이름을 추정 할 수 인젝터가 함수 선언 검사 및 파라미터 명을 추출하여 주입 할 수있는 기능이 주어

. 위의 예제에서 $ scope와 greeter는 두 개의 서비스로 을 주입해야합니다.

코드를 축소해야하는 경우에도 마찬가지입니다. 더 잘 이해하려면 dev 가이드 (위 링크)의 "$ inject Annotation"섹션을 확인하십시오.

+0

감사합니다. 나는 당신의 링크를 따라 갔다. 그리고 전체가 훨씬 더 궁극적으로 끝났다. [여기] (https://github.com/angular/angular.js/blob/master/src/auto/injector.js) _, 여기서 나는 마술을 발견했다. 함수를 문자열로 변환 한 다음 매개 변수를 정규 표현합니다. – aidan

0

컨트롤러는 어떤 순서로든 컨트롤러를 기대하지 않습니다! 그들은 서비스 순서로 지정할 수 있습니다.

1

기본적으로 AngularJS와 인젝터 서비스는 내장 AngularJS와 서비스 ($ 기호로 시작하는)의 이름에 대해 컨트롤러 함수의 인수의 이름과 일치합니다

// Old way to define your controller 
angular.module('yourModule') 
    .controller('yourController', function($scope, $http, yourService){ 

     // Your code here 

    }); 

을하지만,이 때문에 단순히 문자열 비교를 기반으로하면 코드가 uglified 및/또는 축소 될 때 문제가 발생할 수 있습니다. 따라서

이 같은 배열 표기법을 사용하여 컨트롤러를 만들기위한 새로운 구문을 사용하는 것이 좋습니다 :

컨트롤러 기능은 사용자가 주입하고자하는 서비스로 구성된 배열로 대체됩니다
// Newer, better way to define your controller 
angular.module('yourModule') 
    .controller('yourController', ['$scope', '$http', 'yourService', function($scope, $http, yourService){ 

     // Your code here 

    }]); 

공지 것을 컨트롤러 기능으로 끝납니다.당신이 사용할 수 있도록

['yourService', 'yourOtherService', function(yourService, yourOtherService){ 

    // You can use yourService and yourOtherService here 
}] 

이 이름이 일치하지 않아도 :

['$http', '$scope', function(h, s){ 

    // You can use h and s here 
    // h will be the $http service, s will be the $scope 
}] 

이제 순서대로 서비스를 주입합니다

AngularJS와는 같은 배열을 지정 최신 배열 표기법을 사용하는 것이 좋습니다. 코드를 축소하거나 uglify 한 후에도 코드가 작동 할 수 있기 때문입니다.

희망 하시겠습니까?

관련 문제