2016-04-18 14 views
0

bekam ich dieses Ereignis:Passfunktion zu Angular Ereignisbehandlung rootScope.on

app.run(function($rootScope){ 

document.addEventListener('keyup',function(){ 
if (e.keyCode ===13){ 
$rootScope.$broadcast("EnterPressed",e.target); 
} 

}) 

}) 

Ich möchte durch diesen Befehl in meinem Controller das Ereignis auszulösen:

$scope.$on('EnterPressed',console.log("pressed enter"); 

wenn ich führen Sie den Code oben die aufgefrischten ausgelagert, wenn ich sehe die „Enter gedrückt“ Nachricht auf der Konsole

aber wenn Im tut es so:

$scope.$on('EnterPressed',function(){console.log("pressed enter")}; 

Der Code wird nur ausgeführt, wenn die Eingabetaste gedrückt wird.

Was ist der Unterschied?

Antwort

0

$scope.$on erwartet als zweiten Parameter einen Funktionszeiger, wenn Sie console.log("pressed enter") schreiben -> dann ist das kein Funktionszeiger. Es ist bereits ein Funktionsaufruf.

$scope.$on('EnterPressed',console.log("pressed enter")); 

Zu diesem Zeitpunkt wird console.log("pressed enter") bereits verarbeitet, um den Parameterwert zu berechnen (wird hier nicht definiert).

Ihr zweites Beispiel ist der richtige Weg, um dieses Ereignis

$scope.$on('EnterPressed',function(){console.log("pressed enter")}; 

zu erhalten, weil Sie nur einen Funktionszeiger als Parameter verwenden.

+0

Thank you! Es half mir –

+0

So wählen Sie Ihren Gewinner;) – rootatdarkstar

0

Im ersten Fall passiert das, weil der Ausdruck console.log("pressed enter") einmal ausgewertet wird, wenn die Seite geladen wird.

Funktion console.log mit beliebigen Argumenten zurück undefined. So $scope.$on('EnterPressed',console.log("pressed enter")); entspricht $scope.$on('EnterPressed',undefined); mit Nebeneffekt des Drucks "pressed enter" zu Konsole.

Im zweiten Fall übergeben Sie eine Callback-Funktion an console.log und diese Funktion wird noch nicht aufgerufen. Wenn Ereignis gesendet wird, übergeben $scope.$on Aufrufe die Funktion.

Um dies zu verstehen Sie Unterschied zwischen diesen beiden Ausdrücken sehen muss:

// passed the function: 
$scope.$on('EnterPressed', function(){ console.log("pressed enter") }); 

// passed result of the function: 
$scope.$on('EnterPressed', function(){ console.log("pressed enter") }()); 
+0

Vielen Dank! Es hat mir auch geholfen :) –