2013-04-26 2 views
5

지시어가 여러 개 있고 특정 인스턴스 만 대상으로하고 싶습니다. 예를 들어, 아래 코드에서 class="one" 인 div가 이벤트 $rootScope.$broadcast('myEvent')에 의해 트리거되는 유일한 것임을 확인하는 방법은 무엇입니까?AngularJS : 여러 인스턴스로 특정 지시문을 대상으로 지정하는 방법

JS :

myApp.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     controller: function(scope, el, attrs) { 
      scope.$on('myEvent', function() { 
       el.css({left: '+=100'}); 
      }); 
     }, 
    };  
}); 

HTML : 당신은 당신의 이벤트 처리기에서이 검사를 수행해야

<div my-directive class="one"></div> 
<div my-directive class="two"></div> 
+0

대신 방송의 다음 대신

controller: function(scope, el, attrs) { scope.moveElement = function() { el.css({left: '+=100'}); } } 

클래스

<div my-directive id="one"></div> <div my-directive id="two"></div> 

의 및 컨트롤러에 ID를 사용 할 수 있습니다 가능합니다. 모든 하위 범위의 브로드 캐스트이므로 이벤트 알림을받습니다. –

답변

4

:

myApp.directive('myDirective', function() { 
    return { 
    restrict: 'A', 
     controller: function(scope, el, attrs) { 
     scope.$on('myEvent', function(ev,args) { 
      //do the check - you could provide a function, a value or something else 
      if(el.hasClass(args.class)){ 
      el.css({left: '+=100'}); 
      } 
     }); 
     }, 
    };  
}); 

은 그런 다음 $ 방송에 매개 변수를 추가

$rootScope.$broadcast('myEvent',{class:'one'}) 
,
+0

감사합니다. 이 놀라운 솔루션을 제공합니다. – Wishnu

1

그런 다음에 $의 콜백 내에서 실행되는 콜백 참조하는이 지침에 대한 새로운 속성을 정의 할 수 있습니다 :

myApp.directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope: { 
      callme: "=" 
     }, 
     controller: function(scope, el, attrs) { 
      scope.$on('myEvent', function() { 
       scope.callme(el) 
      }); 
     }, 
    };  
}); 

HTML을 선언 : 당신의 컨트롤러 범위에서

<div my-directive class="one" callme="functionDefinedInScope"></div> 

:

http://docs.angularjs.org/guide/directive (섹션 "D :
$scope.functionDefinedInScope = function(el) { 
    el.css({left: '+=100'}); 
} 

여기에 대해 자세히 알아보기 그렇지 않은 AFAIK irective 정의 개체 ")

+0

내 경우에는 작동하지 않을 수 있습니다. 저는 다른시기에 지시어 중 하나를 목표로 삼을 수 있음을 언급하는 것을 잊었습니다. – teggy

0

당신은

angular.element('#one').scope().moveElement() 
관련 문제