Wszelkie zmiany w stosie aktualizacji aktualizacji zawsze prowadzą z powrotem do globalZoneAwareCallback
. Jak dowiedzieć się, co spowodowało zmianę?
Jeśli chodzi o debugowanie, dobrze jest mieć wyraźny obraz.
angular
debugging
angular-ngzone
użytkownik2167582
źródło
źródło
Odpowiedzi:
globalZoneAwareCallback
to funkcja zadeklarowana w zonejs do obsługi wszystkich wywołań zwrotnych zdarzeń za pomocącapture=false
. (btw, bocapture=true
jestglobalZoneAwareCaptureCallback
)Oznacza to, że każdy detektor zdarzeń najpierw przejdzie tę metodę. Ten detektor może zostać dodany na stronie przez Angular, przez ciebie lub dowolną bibliotekę strony trzeciej.
Istnieje wiele sposobów słuchania zdarzeń przeglądarki w Angular:
subskrybuj zdarzenie przeglądarki
<element (event)="callback()">
@HostListener
dekorator@HostListener('event') callback() {}
Renderer2.listen
metodarxjs
fromEvent
przypisać właściwość elementu
element.on<event> = callback
metoda addEventListener
element.addEventListener(event, callback)
(ta metoda jest używana wewnętrznie na wiele innych sposobów powyżej)Gdy znajdziesz się w środku
globalZoneAwareCallback
, masz dostęp do wszystkich zadań strefy, które powinny zostać uruchomione.Wyobraźmy sobie, że słuchamy
click
wydarzenia nadocument.body
:Otwórzmy narzędzia programistyczne Chrome, aby uzyskać wyraźny obraz:
Co właśnie odkryliśmy:
każde zadanie strefy zawiera źródło, więc to powoduje zmianę
Właściwość target pokazuje, który obiekt wyzwala zmianę
Właściwość wywołania zwrotnego może doprowadzić nas do modułu obsługi zmiany
Rozważmy inny przykład i dodajmy zdarzenie click za pomocą Angular:
Po kliknięciu tego
h2
elementu powinniśmy przestrzegać następujących zasad:Możesz być zaskoczony, że teraz właściwość wywołania
test
zwrotnego nie od razu doprowadziła nas do wywołania zwrotnego, ale raczej pokazaliśmy opakowanie@angular/platform-browser package
. A także inne przypadki mogą się różnić, ale ZoneTask.source nieruchomość jest zwykle wszystko trzeba w tych sprawach, ponieważ pokazuje ci przyczynę zmiany .źródło