2014-01-31 21 views
10

Ich möchte eine benutzerdefinierte AngularJS-Direktive auslösen, die jQuery-Anweisungen enthält. Wie kann es gemacht werden? Ich habe über Emissionsfunktion in der Richtlinie gelesen?AngularJS Trigger-Anweisung vom Controller-Aufruf

Ideen?

+1

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

Antwort

24

Sie können einen Dienst verwenden, um zwischen dem Controller und der Anweisung zu kommunizieren.

Dienst könnte wie folgt aussehen:

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

und die Richtlinie auf den Dienst reagieren könnte:

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

einfach ersetzen, was ich für jQuery Manipulation haben und Sie sollten, was Sie brauchen.

Hier ist eine Arbeits Geige: http://jsfiddle.net/jeremylikness/wqXYx/

+1

Was sind die Vorteile der es zu tun auf diese Weise über die Verwendung von $ broadcast/$ auf? – Strawberry

+3

Broadcast erzeugt eine Abhängigkeit von $ scope sowie von $ scope hiearchy. Wenn Sie darauf vertrauen, dass viele Listener aufgerufen werden, die an der Nachricht interessiert sind oder nicht, während ein expliziter Service nur auf die Komponenten abzielt, die sie benötigen. Es macht es auch einfacher zu testen und ist wiederverwendbar und in sich abgeschlossen. –

Verwandte Themen