2016-05-26 13 views
2

Ich versuche, Winkelfunktion zu regulären js Ereignis (logedIn Ereignis) mit Winkel Direktive wie beschrieben here.bind reguläre benutzerdefinierte js-Ereignis zu eckigen Controller-Funktion

Die Richtlinie Code lautet:

evApp.directive('onlogin', function() { 
return { 
    restrict: 'A', 
    transclude: true, 
    scope: { 
     'onlogin': '&' 
    }, 
    link:function (scope, element, attr) { 
     //Code to detect when element is pulled goes here 
     document.addEventListener("logedIn", function (e) { 
      scope.$eval(attr.onlogin); 
     }); 
    } 
} 
}); 

Der HTML-Tag ist:

<div onlogin="loggedIn()"></div> 

Sein gearbeitet, aber ich habe nicht einen Weg vorbei an der Parameter 'e' gefunden, die mit dem Ereignis angekommen in der Link-Funktion. Ich habe versucht, vom html nur den Funktionshandler zu übergeben und die Funktion mit den Parametern aus der Linkfunktion aufzurufen, aber es hat nicht funktioniert. soetwas wie:

<div onlogin="loggedIn"></div> 

Danke, Amichai

+0

Sie sollten den Bereich hinzufügen $ apply, um eckig jetzt zuzulassen, dass es digest cycle auslösen muss und dann nur scope.onlogin aufrufen ({e: e}); – sielakos

Antwort

1

Der Aufruf der Funktion onlogin Bedarf innerhalb anonyme Funktion sein, um Parameter hinzuzufügen, aber die Funktion müssen außerhalb der anonymen Funktion gespeichert werden, sonst wird es nicht ausgelöst.

+0

Ja, du hattest recht damit, ich habe es verpasst, denn du hast das Paste-Fragment deines Codes kopiert und dort hast du attr benutzt, offensichtlich sollte es der Umfang sein. Mein Fehler beim Lesen von Code sorgfältig genug. – sielakos

3

Sie sollten Umfang plus $ gelten Winkel jetzt lassen, dass es Zyklus zu verdauen schießen muss und dann scope.onlogin einfach anrufen ({e: e}.) Im Grunde können Sie es im Handler verwenden, wie Sie $ event verwenden würden.

evApp.directive('onlogin', function() { 
return { 
    restrict: 'A', 
    transclude: true, 
    scope: { 
     'onlogin': '&' 
    }, 
    link:function (scope, element, attr) { 
     //Code to detect when element is pulled goes here 
     document.addEventListener("logedIn", function (e) { 
      scope.$apply(function() { 
      scope.onlogin({e: e}) 
      }); 
     }); 
    } 
} 
}); 
+0

Es gibt mir einen Fehler, dass attr.onlogin keine Funktion ist – amichai

+0

Ich änderte die attr.onlogin ({e: e}); zu scope.onlogin ({e: e}); und jetzt funktioniert es. Vielen Dank. – amichai

+0

Ja, Sie haben Recht. Ich habe einen Fehler gemacht, als ich den Code kopiert habe. – sielakos