2014-10-20 5 views
8

Ich habe diesen Code in nativem JavaScript und es funktioniert alles in Ordnung. es protokolliert den aktuellen Wert der TextboxAngularJS - Übergabe dieses.Wert in eine Funktion

<script> 
    var boom = function(val) { 
     console.log(val); 
    }; 
</script> 

<input type="text" onclick="boom(this.value)"/> 

Dann möchte ich das gleiche auf AngularJS ohne Modell zu tun. Hier ist der Code:

$scope.boom = function(val) { 
    console.log(val); 
}; 

<input type="text" ng-click="boom(this.value)"/> 

Aber es meldet sich immer undefined!
Warum?

+0

Sie sollten eine Dokumentation über AngularJS der Controller, der Umfang und Richtlinien lesen. Befolgen Sie einige Tutorials, bevor Sie Code eingeben. –

Antwort

18

Wie ich weiß, this im Zusammenhang mit ng-* ist ein scope.
Sie können über boom($event.target.value) zugreifen.

+0

Perfekt! Netter ein Kumpel! –

+0

danke, gerettet mein Tag. – Cody

1

"Wert" ist nicht im Gültigkeitsbereich definiert.

Ich werde ein wenig Miraage Antwort erweitern ..

this wird auf den Umfang beziehen. Wenn Sie auf das DOM-Element zugreifen möchten, verwenden Sie $ event. In der Callback-Funktion können Sie den DOM-Element Wert erhalten boom($event.target.value)

9

die Winkel Weise unter Verwendung ngModel verwenden:

<input type="text" ng-model="input" ng-click="boom()"/> 

und in der Steuerung:

var boom = function() { 
    console.log($scope.input); 
}; 

this.input wird auch funktionieren, da this Punkte zum aktuellen Bereichsobjekt.

Wenn Sie noch Modell vermeiden, dann können Sie Ereignisobjekt verwenden:

<input type="text" ng-click="boom($event)"/> 

und

var boom = function($event) { 
    console.log($event.target.value); 
}; 
+2

Warum nicht 'ng-click =" boom (input) "'? Keine Notwendigkeit, das Ereignis zu übergeben. – Yoshi

+0

yeah, du kannst einfach ng-click = "boom (input)" verwenden, nur @yoshi sagte. Und ich brauche auch kein Modell aus irgendeinem Grund –

Verwandte Themen