2014-01-31 3 views
10

jQuery 명령어가 포함 된 AngularJS 사용자 지정 지시문을 트리거하려고합니다. 어떻게 할 수 있습니까? 지시문에서 emit 함수에 대해 읽었습니까?컨트롤러 호출의 AngularJS 트리거 지시문

아이디어가 있으십니까?

+1

http://stackoverflow.com/questions/16935095/correct-way-to-integrate-jquery-plugins-in-angular-js – Ismael

답변

24

서비스를 사용하여 컨트롤러와 지침간에 통신 할 수 있습니다.

서비스는 다음과 같습니다

app.service("directiveService", function() { 
    var listeners = []; 
    return { 
     subscribe: function(callback) { 
      listeners.push(callback); 
     }, 
     publish: function(msg) { 
      angular.forEach(listeners, function(value, key) { 
       value(msg); 
      }); 
     } 
    }; 
}); 

그리고 지시어는 서비스에 대응할 수 :

app.directive("jQueryDirective", function(directiveService) { 
    directiveService.subscribe(function(msg) { 
     // pretend this is jQuery 
     document.getElementById("example") 
     .innerHTML = msg; 
    }); 
    return { 
     restrict: 'E'   
    }; 
}); 

그냥 내가 jQuery를 조작을 위해 무엇을했는지 대체 당신은 당신이 필요 있어야합니다. 여기

는 작업 바이올린의 : http://jsfiddle.net/jeremylikness/wqXYx/

+1

그 일의 장점은 무엇입니까 이 방법은 $ broadcast/$ on을 사용하는 것입니까? – Strawberry

+3

브로드 캐스트는 $ scope hiearchy뿐만 아니라 $ scope에 대한 종속성을 만듭니다. 당신이 의존하는 경우에는 청취자가 많이 불려지므로 메시지에 관심이 있거나 없을 수도 있습니다. 명시 적 서비스는 필요로하는 구성 요소만을 대상으로합니다. 또한 테스트가 쉽고 재사용이 가능하며 자체 포함되어 있습니다. –