私はネイティブJavaScriptでこのコードを使用しており、問題なく動作します。テキストボックスの現在の値を記録します
<script>
var boom = function(val) {
console.log(val);
};
</script>
<input type="text" onclick="boom(this.value)"/>
次に、モデルを使用せずにAngularJSでも同じようにしたいと思います。これがコードです:
$scope.boom = function(val) {
console.log(val);
};
<input type="text" ng-click="boom(this.value)"/>
ただし、常にログに記録されますndefined!
なぜ?
私が知っているように、_ng-*
_のコンテキストにおけるthis
はscope
です。boom($event.target.value)
を介してアクセスできます。
Angular方法はngModel
を使用することです:
<input type="text" ng-model="input" ng-click="boom()"/>
そしてコントローラーで:
var boom = function() {
console.log($scope.input);
};
this
は現在のスコープオブジェクトを指しているため、this.input
も機能します。
それでもモデルを避けたい場合は、イベントオブジェクトを使用できます。
<input type="text" ng-click="boom($event)"/>
そして
var boom = function($event) {
console.log($event.target.value);
};
「値」はスコープで定義されていません。
ミラージュの答えを少し広げます。
this
はスコープを参照します。 DOM要素にアクセスする場合は、$ eventを使用します。コールバック関数では、boom($event.target.value)
を使用してDOM要素の値を取得できます