Будь-які зміни в сліді стеку оновлень завжди призводять до globalZoneAwareCallback
. Як ви дізнаєтесь, що спричинило зміни?
У плані налагодження добре мати чітку картину.
Будь-які зміни в сліді стеку оновлень завжди призводять до globalZoneAwareCallback
. Як ви дізнаєтесь, що спричинило зміни?
У плані налагодження добре мати чітку картину.
Відповіді:
globalZoneAwareCallback
- це функція, оголошена в zonejs для обробки всіх зворотних викликів подій capture=false
. (btw, бо capture=true
є globalZoneAwareCaptureCallback
)
Це означає, що будь-який слухач подій спочатку пройде цей метод. Цей слухач може бути доданий на сторінку Angular, ви або будь-якою стороною бібліотекою.
Існує багато способів того, як ми можемо слухати події браузера в Angular:
підписатися на події браузера <element (event)="callback()">
@HostListener
декоратор @HostListener('event') callback() {}
Renderer2.listen
метод
rxjs fromEvent
призначити властивість елемента element.on<event> = callback
метод addEventListener element.addEventListener(event, callback)
(цей метод використовується внутрішньо багатьма іншими способами вище)
Після того, як ви всередині, globalZoneAwareCallback
отримаєте доступ до всіх завдань Зони, які слід запустити.
Давайте уявимо, що ми слухаємо click
подію на document.body
:
document.body.addEventListener('click', () => {
// some code
});
Давайте відкриємо інструменти для розробників Chrome, щоб мати чітке зображення:
Що ми тільки що відкрили:
кожне завдання зони містить джерело, і саме це викликає зміни
властивість target показує, який об'єкт запускає зміни
властивість зворотного виклику може привести нас до обробника змін
Розглянемо ще один приклад та додамо подію клацання за допомогою кутового способу:
<h2 class="title" (click)="test()">Hello {{name}}</h2>
Після натискання на цей h2
елемент ми повинні спостерігати наступне:
Ви можете бути здивовані , що тепер на зворотний дзвінок властивість не призведе нас до функції test
зворотного виклику одразу, а ми показали деяку обгортку від @angular/platform-browser package
. І інші випадки також можуть відрізнятися, але властивість ZoneTask.source зазвичай є всім, що вам потрібно в цих випадках, оскільки воно показує вам першопричину змін .