0

Ich habe ein Attribut-Direktive, die Ereignis-Listener für bestimmte Ereignisse auf ein Element in der Verbindung() Funktion über element.addEventListener(<event>, handler);AngularJS: Wie Event-Handler von einem Element entfernt werden, die von einer Direktive hinzugefügt wurden?

Schließlich fügt hinzu, ich möchte diese Handler auf Logik in meinem Controller basierend auf dynamisch entfernen. Wie kann ich das machen? Ich habe erwogen, removeEventListener nur auf dem Element in meinem Controller aufzurufen, aber ich habe keinen Verweis auf die Handler-Funktion, da es in meiner Direktive ist.

+0

Die Direktive muss eine Option zur Verfügung stellen, wie die Verwendung eines Flags um zu bestimmen, ob der Listener vorhanden sein soll oder durch Aussetzen einer API zum Hinzufügen/Entfernen des Listeners –

+0

$ emit oder $ broadcast, auch Remove alle Listener im Bereich. $ on ('$ destroy', ...) um Speicherlecks zu vermeiden –

+0

@EvgenyPopov ist das nur, wenn ich Elemente von der Seite entferne? Diese Elemente bleiben auf der Seite, bis die Seite geschlossen wird/die Ansicht wird geändert. – PDN

Antwort

1

Sie können Ereignishandler am Ende entfernen.

scope.$on('$destroy', function() { 
     //Code to remove Event  
}); 

Und wenn Sie es zwischendurch entfernen möchten, dann können Sie für eine Veranstaltung innerhalb Richtlinie und Sendung hören oder von der Steuerung abgeben, wenn Sie wollen.

Verwandte Themen