IT TIP

컨트롤러에서 $ inject 사용을 이해하지 못합니다.

itqueen 2020. 11. 23. 20:44
반응형

컨트롤러에서 $ inject 사용을 이해하지 못합니다.


Angular에서 주입하는 것에 대해 완전히 혼란 스럽습니다. 나는 그것을 어디에 사용하고 왜 사용하는지 모른다. 여기에 설명 된대로 공장에서만 사용 됩니까?

myController.$inject = ['$scope','notify'];

여기 notify에 공장 이름이 있습니다.


이는 코드가 축소 된 후 종속성 주입을 지원하는 한 가지 접근 방식입니다 (최소화를 선택한 경우).

컨트롤러를 선언 할 때 함수는 매개 변수를 사용합니다.

function ($scope, notify)

코드를 축소하면 함수는 다음과 같습니다.

function (a, b)

AngularJS는 DI를 추론하기 위해 함수 매개 변수 이름을 사용하므로 AngularJS가 a또는 에 대해 알지 못하기 때문에 코드가 손상됩니다 b.

이 문제를 해결하기 위해 해당 문제에 대한 컨트롤러 (또는 기타 서비스 / 공장 등)를 선언하는 추가 방법을 제공했습니다.

  1. 컨트롤러의 경우 $inject메서드를 사용합니다. 여기서 컨트롤러 함수의 매개 변수에 매핑되는 리터럴 배열을 전달합니다. 따라서 제공하는 경우

    ['$scope', 'notify']
    

    그러면 함수에 대한 첫 번째 매개 변수의 값은이 컨트롤러와 연관된 범위 개체가되고 두 ​​번째 매개 변수는 알림 서비스가됩니다.

  2. 새 컨트롤러, 서비스 등을 선언 할 때 배열 리터럴 구문을 사용할 수 있습니다. 여기에서 다음과 같이합니다.

    angular.module('myModule').controller('MyController', ['$scope', 'notify', function ($scope, notify) {
        ...
    }]);
    

    컨트롤러 함수에 대한 매개 변수로서의 배열은 DI 객체를 함수 매개 변수에 매핑합니다.

컨트롤러 등을 선언 할 때 옵션 # 2를 선호합니다. 모두 같은 위치에 있기 때문에 읽기 / 이해 / 교차 검사가 더 쉽기 때문입니다.


@ 마크 답변 을 보완하려면 $ 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).

따라서 AngularJS의 경우 $scope's'로 대체 될 수 있으므로 코드가 손상됩니다 . 이것은 $부호가 없으면 angularJS가 코드를 인식 할 수 없기 때문 입니다.


ng-strict-di속성 이있을 때이 형식을 사용해야 합니다.

참고 URL : https://stackoverflow.com/questions/18698963/i-dont-understand-the-use-of-inject-in-controllers

반응형