2013-09-01 7 views
5

AngularJSの初心者です。質問がありますが、なぜng-changeは$イベントを渡しませんか? HTML

<div ng-controller="foo"> 
    <select ng-model="item" ng-options="opts as opts.name for opts in sels" ng-change="lstViewChange($event)" ng-click="listViewClick($event)"></select> 
</div> 

スクリプト

var myApp = angular.module('myApp', []); 
angular.element(document).ready(function() { 
    angular.bootstrap(document, ['myApp']); 
}); 

function foo($scope) { 
    $scope.sels = [{id: 1, name: 'a'}, {id: 2, name: 'b'}]; 

    $scope.lstViewChange = function($event){ 
     console.log('change', $event); //undefined 
    } 

    $scope.listViewClick = function($event){ 
     console.log('click', $event); //object 
    } 
} 

このフィドルhttp://jsfiddle.net/QfZZH/を見てください。 Clickは有効な$イベントを渡しますが、changeは受け付けません。誰かがこの行動を説明できますか?

答えて

5

明示するだけで、ドキュメントにはngClickがイベントを渡しますが、ngChangeにそのようなドキュメントはありません。

あなたが求めているのは、Angularのデザイナーがこれを選んだ理由です。私の考えでは、クリックの結果としてngClickが発生するので、指令発射に関連するマウスイベントが存在すると考えられます。一方、ngChangeは、1つの特定のイベントではなく、あらゆる種類のイベントに関連付けられるモデルを変更するユーザーアクションの結果です。

関連する問題