2013-04-01 13 views
8

Ich habe "ng-Modell" im Eingabeelement verwendet und dieses Element mit dem Chrom Inspector beobachtet. Aber alle onxxx-Eigenschaften (einschließlich onchange) des Eingabeelements waren null. Wie kann AngularJS dann das "onchange" -Ereignis durch Benutzereingaben erfassen?Wie erfasst AngularJS intern Ereignisse wie 'onclick', 'onchange'?

+0

Sie möchten vielleicht überprüfen http://StackOverflow.com/Questions/9682092/Databinding-in-angularjs –

+0

@fastreload Vielen Dank! Ich habe diesen Artikel gerade gelesen, aber es ist immer noch nicht klar. Laut diesem Artikel verwendet AngularJS $ apply() und $ digest() für die Dirty-Prüfung. Aber wer nennt diese Funktionen? Verwendet das 'eckige' Modul etwas wie setInterval() zum Abfragen? – firia2000

+0

Es gibt einige Ereignisbeobachter, die "Digest" -Phasen initiieren, Stewie Antwort hat einige Details. –

Antwort

13

Wenn in Chrome Ereignis-Listener Registerkarte Sie ein Standard-Texteingabeelement überprüfen (mit ng-Modell im Anhang) Sie werden sehen, dass es zwei Event-Listener hat angehängt: $destroy und input.

Angular, standardmäßig auf input Ereignis, und, falls es nicht vom Browser unterstützt wird, fällt es zurück auf keydown + change Ereignisse.

Ereignisse werden mit der Bind-Methode von jQlite verknüpft (es sei denn, Sie haben auch eine vollständige jQuery, in diesem Fall wird die Bind-Methode übernommen).

Beispiel für ein Eingabeelement, das Sie selbst überprüfen können, finden Sie auf der Doku-Dokumentationsseite input [email].

Exact line in Angular source (v1.2.0rc1) verantwortlich für die Behandlung des Eingabeereignisses.

+0

Jetzt ist es völlig klar. Vielen Dank! – firia2000

+1

Warum feuert jquery das Eingabeereignis nicht mit val() !!! ?? Wie sonst würden Sie diese Änderung korrekt propagieren? – tommybananas

+0

@ snowman4415 Gefällt mir: http://stackoverflow.com/a/17110709/1095616 – Stewie

-1

Sie können Ereignis-Listener einem DOM-Knoten mit Hilfe anhängen:

node.addEventListener (eventname, listenerMethod, useCapture)

Während Sie vor einer Methode zugewiesen addEventListener node.onchange, zu verwenden, müssen Sie fügen Sie dem Ereignis 'Ändern' oder 'Klicken' einen Ereignis-Listener hinzu.

See: https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener

+1

Die Frage ist über angularjs insbesondere, nicht dom Ereignishandler –

+0

Nun, AngularJS ist immer noch Javascript mit dem DOM Recht? So eckig anfügen einige Event-Listener mit dem DOM, ich weiß nicht angular, aber ich nehme an, dass Ereignis an das Dokumentelement angehängt werden und sie Ereignisblubbern verwenden, um zu filtern, welches Ziel das DOM-Ereignis erhalten wird. – KKetch

+0

Auf der Basis, ja muss es. Aber in der Tat funktioniert es nicht so, wie Sie "annehmen". Es verwendet das Dirty-Checking-Modell, um herauszufinden, was sich geändert hat. Sie können mehr darüber lesen inhttp: //stackoverflow.com/questions/9682092/databinding-in-angularjs –

Verwandte Themen