AngularJS $injector 종속 주입 상세 정보

4032 단어
추정식 주입
이런 주입 방식은 매개 변수의 이름이 서비스 이름과 같다는 것을 보증해야 한다.만약 코드가 압축 등의 조작을 거쳐야 한다면 주입 실패를 초래할 것이다.

 app.controller("myCtrl1", function($scope,hello1,hello2){
    $scope.hello = function(){
      hello1.hello();
      hello2.hello();
    }
  });

태그 주입
이런 주입 방식은 의존 수조를 설정해야 한다. 수조 안은 의존하는 서비스 이름이고 함수 매개 변수에서 임의로 매개 변수의 이름을 설정할 수 있지만 순서의 일치성을 확보해야 한다.

var myCtrl2 = function($scope,hello1,hello2){
    $scope.hello = function(){
      hello1.hello();
      hello2.hello();
    }
  }
  myCtrl2.$injector = ['hello1','hello2'];
  app.controller("myCtrl2", myCtrl2);

내연식 주입
이런 주입 방식은 두 개의 매개 변수를 직접 전송하는데, 하나는 이름이고, 다른 하나는 하나의 수조이다.이 수조의 마지막 매개 변수는 진정한 방법체이고 다른 것은 모두 의존하는 목표이지만 방법체의 매개 변수 순서와 일치해야 한다(표기 주입과 같다).

app.controller("myCtrl3",['$scope','hello1','hello2',function($scope,hello1,hello2){
    $scope.hello = function(){
      hello1.hello();
      hello2.hello();
    }
  }]);

$injector에서 자주 사용하는 방법
angular에서 angular를 통과할 수 있습니다.injector () 는 주입기를 얻습니다.
var $injector = angular.injector();
$injector를 통해.get('서비스Name')에서 의존하는 서비스 이름을 얻습니다.
$injector.get('$scope')
$injector를 통해.annotate ('xxx') 는 xxx의 모든 의존 항목을 가져옵니다.
$injector.annotate(xxx)
샘플 코드



  
  


  
var app = angular.module("myApp",[]); app.factory("hello1",function(){ return { hello:function(){ console.log("hello1 service"); } } }); app.factory("hello2",function(){ return { hello:function(){ console.log("hello2 service"); } } }); var $injector = angular.injector(); console.log(angular.equals($injector.get('$injector'),$injector));//true console.log(angular.equals($injector.invoke(function($injector) {return $injector;}),$injector));//true //inferred // $injector.invoke(function(serviceA){}); app.controller("myCtrl1", function($scope,hello1,hello2){ $scope.hello = function(){ hello1.hello(); hello2.hello(); } }); //annotated // function explicit(serviceA) {}; // explicit.$inject = ['serviceA']; // $injector.invoke(explicit); var myCtrl2 = function($scope,hello1,hello2){ $scope.hello = function(){ hello1.hello(); hello2.hello(); } } myCtrl2.$injector = ['hello1','hello2']; app.controller("myCtrl2", myCtrl2); //inline app.controller("myCtrl3",['$scope','hello1','hello2',function($scope,hello1,hello2){ // app.controller("myCtrl3",['$scope','hello1','hello2',function(a,b,c){ // a.hello = function(){ // b.hello(); // c.hello(); // } $scope.hello = function(){ hello1.hello(); hello2.hello(); } }]); console.log($injector.annotate(myCtrl2));//["$scope","hello1","hello2"]

이상은 AngularJS injector에 대한 자료 정리입니다. 후속으로 관련 자료를 계속 보충해 드리겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기