AngularJS 사용자 정의 Directive 및 controller 상호 작용

2443 단어

때때로 사용자 정의 디렉터리에서 컨트롤러를 호출하는 방법이 필요합니다. 즉, 디렉터리와 컨트롤러는 일정한 결합도를 가지고 있습니다.예를 들어 다음과 같은 컨트롤러가 있습니다.
 
app.controller('MyCtrl',function($scope){
   $scope.load = function(){
       console.log('loading more...')
   }
});

 
현재 Direcitve를 사용자 정의합니다. MyCtrl이라는 컨트롤러의load 방법을 사용해야 합니다.
 
app.directive('enter', function(){
    return function($scope, ele, attrs){
        ele.bind('mouseenter', function(){
            $scope.load();
        })
    }
})

 
페이지는 다음과 같이 호출됩니다.
 
 <div ng-controller="MyCtrl">
    <div enter>enter to load more</div>
  </div>

 
MyCtrl에서 다른 방법을 사용하려면?이 때direcitve의 인코딩을 변경해야 합니다.이를 통해 알 수 있듯이directive에서 하드 인코딩을 하는 방법은controller를 호출하는 방법이 불합리하다는 것을 알 수 있다.그러면 변화의 가능성을 페이지에 올리면 어떨까요?enter에 속성 값을 줍니다. 이 속성 값은 어떤 방법을 사용하는지 표시합니다.
  <div ng-controller="MyCtrl">
    <div enter="load()">enter to load more</div>
  </div>
  

 
이렇게 하면directive에서 하드코딩하는 것보다 유연하다.directive는 다음과 같이 변경됩니다.
 
app.directive('enter', function(){
    return function($scope, ele, attrs){
        ele.bind('mouseenter', function(){
            $scope.$apply('load()');
        })
    }
})

 
그러나 상하문의 $apply 방법을 호출할 때 입력된 실삼도 문자열이기 때문에 위의 쓰기가 가장 합리적이지 않습니다.링크 함수에 형참attrs가 있다는 것을 잊지 마세요. 이것을 통해 임의의 속성 값을 얻을 수 있습니다.
 
app.directive('enter', function(){
    return function($scope, ele, attrs){
        ele.bind('mouseenter', function(){
            $scope.$apply(attrs.enter);
        })
    }
})

좋은 웹페이지 즐겨찾기