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"?
Odpowiedz
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.
Teraz jest całkowicie jasne. Dziękuję Ci! – firia2000
Dlaczego jQuery nie uruchamia zdarzenia wejściowego za pomocą val() !!! ?? Jak inaczej mógłbyś propagować tę zmianę poprawnie? – tommybananas
@ snowman4415 Tak jak to: http://stackoverflow.com/a/17110709/1095616 – Stewie
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
Pytanie dotyczy w szczególności angularjs, a nie obsługi zdarzeń DOM –
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
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 –
- 1. Nadmuchany widok nie łapie zdarzenia onClick
- 2. W jaki sposób można wykorzystać zdarzenia takie jak CancelEventArgs?
- 3. W jaki sposób adnotacje działają wewnętrznie
- 4. W jaki sposób słownik jest utrzymywany wewnętrznie?
- 5. W jaki sposób kursor SQLite działa wewnętrznie?
- 6. W jaki sposób serializacja java działa wewnętrznie?
- 7. W jaki sposób wyrażenia lambda działają wewnętrznie?
- 8. różnica między onClick() i onChange() (przyciski radiowe)
- 9. Zdarzenia onchange w Firefoksie po przywróceniu karty
- 10. W jaki sposób Unicode jest wewnętrznie reprezentowany w Pythonie?
- 11. W jaki sposób interfejsy Java są implementowane wewnętrznie? (vtables?)
- 12. W jaki sposób nazwy zmiennych są przechowywane i mapowane wewnętrznie?
- 13. W jaki sposób dynamicznie przypisujesz atrybut "onclick" JavaScript?
- 14. W jaki sposób EqualityComparer <T> .Default działa wewnętrznie?
- 15. W jaki sposób program cron wewnętrznie planuje zadania?
- 16. Erlang odbiera wiadomość - w jaki sposób odbywa się wewnętrznie?
- 17. W jaki sposób funkcja animacji jquery działa wewnętrznie?
- 18. W jaki sposób witryny takie jak Hubspot śledzą linki przychodzące?
- 19. W jaki sposób CPU wprowadza instrukcje takie jak MUL/MULT?
- 20. W jaki sposób komponenty Swing są wewnętrznie tworzone, układane, odmalowywane, powiadamiane o zdarzeniach, ...?
- 21. Zdarzenia Swipe i OnClick w RecyclerView
- 22. Jak obserwować zdarzenia niestandardowe w AngularJS?
- 23. Propagacja zdarzenia AngularJS - rodzeństwo?
- 24. W jaki sposób wpływają na zawartość tabeli deklarowanie zdarzenia w elemencie col?
- 25. Dodawanie zdarzenia onclick do wiersza tabeli
- 26. Jak uzyskać element iframeId w procedurze obsługi zdarzenia contextMenus onclick?
- 27. Jak mogę programowo uruchamiać zdarzenia Onclick w systemie Android?
- 28. Dynamiczne dodawanie zdarzenia onClick za pomocą jQuery
- 29. dodanie zdarzenia onclick do przycisku dodanego dynamicznie?
- 30. Dołączanie zdarzenia onClick do funkcji łączenia railsów
Możesz sprawdzić http://stackoverflow.com/questions/9682092/databinding-in-angularjs –
@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
Istnieje kilka obserwatorów zdarzeń, które inicjują fazy "digest", odpowiedź Stewie ma kilka szczegółów. –