2013-09-01 5 views
5

Ich bin ein Neuling in AngularJS. Ich habe eine Frage, warum ng-change das $ Event nicht passiert?

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 
    } 
} 

Werfen Sie einen Blick auf diese Geige http://jsfiddle.net/QfZZH/. Click übergibt ein gültiges $ -Ereignis, aber change nicht. Kann jemand dieses Verhalten erklären?

Antwort

5

Nur um das Offensichtliche zu sagen, sagen die Dokumente, dass ngClick das Ereignis passieren wird, aber ngChange hat keine solche Dokumentation.

Also, was Sie fragen ist, warum Angulars Designer dies getan haben? Mein Gedanke ist, dass ngClick als Ergebnis eines Klicks ausgelöst wird, so dass es sinnvoll wäre, dass ein Mausereignis mit der Anweisung feuern verbunden wäre. ngChange auf der anderen Seite ist das Ergebnis einer Benutzeraktion, die das Modell ändert, das mit allen Arten von Ereignissen und nicht mit einem bestimmten Ereignis verknüpft werden kann.

Verwandte Themen