Основная цель Zone. js - уведомить angular, когда происходит асинхронная операция c, и на основании этого angular может решить, следует ли отображать пользовательский интерфейс.
Zone обрабатывает большинство асинхронных API, таких как setTimeout (), Promise.then () и addEventListener () `. Полный список см. В документе «Зональный модуль». Поэтому в этих асинхронных API вам не нужно вручную запускать обнаружение изменений.
Есть еще некоторые сторонние API, которые Zone не обрабатывает. В этих случаях служба NgZone предоставляет метод run (), который позволяет вам выполнять функцию внутри зоны angular. Эта функция и все асинхронные операции в этой функции автоматически инициируют обнаружение изменений в правильное время.
События, связанные с картой, не могут быть обнаружены angular, поскольку эти события рассматриваются как пользовательские события, а не как часть любых асинхронных API (упомянутых выше). Вот почему они явно заставляют эти события запускаться внутри зоны. Таким образом, angular может обнаруживать эти события и инициировать обнаружение изменений соответствующим образом.
Для получения дополнительной информации см .: https://angular.io/guide/zone
Если вы go и видите следующие строки в /google-map.ts, они устанавливают экземпляр карты Google для функции setTarget. Таким образом, используя getLazyEmitter, они присоединяют спецификаторы карты c к экземпляру карты. Опять же, если вы зарегистрируетесь в google-map.ts, вы можете увидеть, что они подключают слушателей, объявив события @output. Таким образом, у каждого @output уже есть слушатели карты как наблюдаемые. Когда происходит событие карты, вызывается функция обратного вызова в this._target.addListener, которая является ngZone.