컨트롤러에서 $inject를 사용할 수 없습니다.
Angular에 주입하는 것에 대해 완전히 혼란스럽다.어디에 왜 써야 할지 모르겠어요.여기 기술된 대로 공장에서만 사용하나요?
myController.$inject = ['$scope','notify'];
여기서notify
공장 이름입니다.
이는 코드가 최소화된 후(최소화를 선택한 경우) 의존성 주입을 지원하기 위한 한 가지 방법입니다.
컨트롤러를 선언하면 함수는 다음 파라미터를 가져옵니다.
function ($scope, notify)
코드를 최소화하면 다음과 같은 기능이 나타납니다.
function (a, b)
각진 이후JS는 함수 매개 변수 이름을 사용하여 DI를 추론합니다. 각도로 인해 코드가 끊어집니다.JS가 모르는 것a
또는b
.
이 문제를 해결하기 위해 컨트롤러(또는 기타 서비스/팩토리 등)를 선언하는 추가 방법을 제공했습니다.
컨트롤러의 경우
$inject
method - 컨트롤러 함수의 파라미터에 매핑되는 리터럴 배열을 전달합니다.그래서, 만약 당신이['$scope', 'notify']
첫 번째 파라미터 값은 이 컨트롤러와 관련된 스코프 오브젝트가 되고 두 번째 파라미터는 알림 서비스가 됩니다.
새 컨트롤러, 서비스 등을 선언할 때 어레이 리터럴 구문을 사용할 수 있습니다.여기, 다음과 같은 작업을 수행합니다.
angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) { ... }]);
컨트롤러 함수의 파라미터로서의 배열은 DI 객체를 함수 파라미터에 매핑합니다.
컨트롤러 등을 선언할 때는 모두 같은 장소에 있기 때문에 읽기/이해/크로스 체크가 용이하기 때문에 옵션 #2를 선호합니다.
@mark 답변을 보완하기 위해서는 $inject 메서드를 다음과 같은 스타일로 사용하는 것이 중요합니다.
MyController.$inject = ['$scope', 'notify'];
에서는 '친숙한' 주석 스타일을 허용하지 않는 유일한 각도 레시피인 공급자를 빌드할 때 주입 종속성을 추가할 수 있습니다.
.controller('MyController', ['$scope', 'notify',...
선언할 종속성.
사용하는 방법$inject
다음과 같습니다.
function ApplicationController($scope){
$scope.greet = "Foo is Not Great!5";
}
ApplicationController.$inject = ['$scope','$ionic'];
app.controller('ApplicationController', ApplicationController);
우리는 코드를 추악화 또는 최소화로부터 보호하기 위해 이것을 할 필요가 있다.
function(firstName,lastName)
으로 바뀔지도 모른다function(n,m)
.
그래서 Angular의 경우JS가 코드를 해독하는 이유는$scope
's'로 대체할 수 있습니다.이것은, 이 기능이 없으면,$
각도에 서명하다JS는 코드를 인식할 수 없습니다.
속성이 있는 경우 이 형식을 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/18698963/i-dont-understand-the-use-of-inject-in-controllers
'programing' 카테고리의 다른 글
스프링 부트 충돌 Bean 정의예외:@Controller 클래스의 주석 지정 빈 이름 (0) | 2023.03.20 |
---|---|
Gson의 POJO 어레이 리스트 시리얼화 문제 (0) | 2023.03.20 |
Jasmine 2.0 async done() 및 angular-mocks inject()가 같은 테스트 it()에서 사용됩니다. (0) | 2023.03.20 |
ng하위 수에 따른 숨김 또는 ngShow (0) | 2023.03.20 |
woocommerce 브레드 크럼 누락 숍 링크 (0) | 2023.03.20 |