2013-04-01 5 views
8

Użyłem "ng-model" w elemencie wejściowym i zaobserwowałem ten element z inspektorem chrome. Ale wszystkie właściwości onxxx (w tym zmiany) elementu wejściowego miały wartość zerową. W jaki sposób AngularJS może wykryć zdarzenie "onchange" wywołane przez dane wprowadzone przez użytkownika?W jaki sposób AngularJS wewnętrznie łapie zdarzenia takie jak "onclick", "onchange"?

+0

Możesz sprawdzić http://stackoverflow.com/questions/9682092/databinding-in-angularjs –

+0

@fastreload Dzięki! Po prostu przeczytałem ten artykuł, ale nadal nie jest to jasne. Zgodnie z tym artykułem AngularJS używa funkcji $ apply() i $ digest() do sprawdzania błędów. Ale kto nazywa te funkcje? Czy moduł "kątowy" używa czegoś takiego jak setInterval() do odpytywania? – firia2000

+0

Istnieje kilka obserwatorów zdarzeń, które inicjują fazy "digest", odpowiedź Stewie ma kilka szczegółów. –

Odpowiedz

13

Jeżeli w karcie detektorów zdarzeń Chrome, możesz sprawdzić standardowego elementu wprowadzania tekstu (NG-modelu załączony) widać, że ma dwa detektory zdarzeń załączone: $destroy i input.

Kątowa domyślnie nasłuchuje zdarzenia input, a jeśli nie jest obsługiwana przez przeglądarkę, wróci do zdarzeń keydown + change.

Zdarzenia są wiązane za pomocą metody powiązania jQlite (chyba że posiadasz również pełną jQuery, w którym to przypadku przejmie ją metoda wiązania).

Przykładowy element wejściowy, który można sprawdzić samemu, znajduje się na stronie dokumentacji dyrektywy input [email].

Exact line in Angular source (v1.2.0rc1) odpowiedzialna za obsługę zdarzenia wejściowego.

+0

Teraz jest całkowicie jasne. Dziękuję Ci! – firia2000

+1

Dlaczego jQuery nie uruchamia zdarzenia wejściowego za pomocą val() !!! ?? Jak inaczej mógłbyś propagować tę zmianę poprawnie? – tommybananas

+0

@ snowman4415 Tak jak to: http://stackoverflow.com/a/17110709/1095616 – Stewie

-1

Możesz dołączyć detektory zdarzeń do dowolnego węzła DOM przy użyciu:

node.addEventListener (EventName, listenerMethod, useCapture)

Podczas przydzielony przed metody node.onchange, używając addEventListener, trzeba dołącz detektor zdarzeń do zdarzenia "zmień" lub "kliknij".

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

+1

Pytanie dotyczy w szczególności angularjs, a nie obsługi zdarzeń DOM –

+0

Cóż, AngularJS nadal jest javascript z prawami DOM? W związku z tym do niektórych detektorów zdarzeń używaj DOM, nie wiem, kątowe, ale przypuszczam, że zdarzenia są dołączone do elementu dokumentu i używają propagacji zdarzeń do filtrowania, który cel otrzyma zdarzenie DOM. – KKetch

+0

Na podstawie tak, musi. Ale w rzeczywistości nie działa tak, jak "przypuszczasz". Wykorzystuje brudny model sprawdzający, aby znaleźć to, co się zmieniło. Możesz przeczytać więcej na ten temat inhttp: //stackoverflow.com/questions/9682092/databinding-in-angularjs –

Powiązane problemy