2013-09-01 2 views
5

Я новичок в AngularJS. У меня вопрос, почему ng-change не передает $ event?

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> 

Script

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 передает действительный $ event, но change этого не делает. Может ли кто-нибудь объяснить это поведение?

ответ

5

Просто, чтобы заявить очевидное, документы говорят, что ngClick пройдет мероприятие, но ngChange не имеет такой документации.

Итак, что вы спрашиваете, почему дизайнеры Angular решили это сделать? Я думаю, что ngClick срабатывает в результате щелчка, поэтому имеет смысл, что будет событие мыши, связанное с обстрелом директивы. ngChange, с другой стороны, является результатом любого действия пользователя, которое изменяет модель, которая может быть связана со всеми видами событий, а не с одним конкретным событием.