Cualquier cambio en el seguimiento de la pila de actualizaciones siempre conduce a globalZoneAwareCallback
. ¿Cómo saber qué provocó el cambio?
En términos de depuración, es bueno tener una imagen clara.
angular
debugging
angular-ngzone
usuario2167582
fuente
fuente
Respuestas:
globalZoneAwareCallback
es una función declarada en zonejs para manejar todas las devoluciones de llamada de eventos concapture=false
. (por cierto, porquecapture=true
hayglobalZoneAwareCaptureCallback
)Significa que cualquier escucha de eventos primero pasará por este método. Angular, usted o cualquier biblioteca de terceros pueden agregar ese oyente a la página.
Hay muchas maneras de cómo podemos escuchar los eventos del navegador en Angular:
suscribirse al evento del navegador
<element (event)="callback()">
@HostListener
decorador@HostListener('event') callback() {}
Renderer2.listen
métodorxjs
fromEvent
asignar propiedad del elemento
element.on<event> = callback
Método addEventListener
element.addEventListener(event, callback)
(este método se usa internamente en muchas otras formas anteriores)Una vez dentro
globalZoneAwareCallback
, tiene acceso a todas las tareas de Zona que deberían activarse.Imaginemos que escuchamos el
click
evento endocument.body
:Abramos las herramientas de desarrollo de Chrome para tener una imagen clara:
Lo que acabamos de descubrir:
cada tarea de Zone contiene fuente, por lo que esto es lo que desencadena el cambio
La propiedad de destino muestra qué objeto desencadena el cambio
la propiedad de devolución de llamada puede llevarnos al controlador del cambio
Consideremos otro ejemplo y agreguemos un evento de clic usando Angular:
Una vez que hacemos clic en ese
h2
elemento, debemos observar lo siguiente:Es posible que se sorprenda de que ahora la propiedad de devolución de llamada no nos trajo a la
test
devolución de llamada de inmediato, sino que mostramos algo de contenedor@angular/platform-browser package
. Y otros casos también pueden diferir, pero ZoneTask.source propiedad es por lo general todo lo que necesita en estos casos, ya que muestra que la causa fundamental del cambio .fuente