Угловая зона обнаружения изменений.js
Имея вопрос относительно статьи о zone.js
в Angular2+. Я читал статью из blog.angular-university.io. Я думал, что некоторые части были немного загадочными и у меня есть некоторые вопросы об этом и вещах, которые я не уверен, правильно ли я понимаю. В статье говорится:
Зона - это не что иное, как контекст выполнения, который переживает несколько поворотов выполнения виртуальной машины Javascript.
Означает ли приведенное выше утверждение, что несколько асинхронных обратных вызовов, которые сложены в очереди событий, имеют один контекст выполнения и, следовательно, одинаковое значение для this
?
Это общий механизм, который мы можем использовать для добавления дополнительных функций в браузер. Angular использует Zones для запуска обнаружения изменений.
Угловое изменение async
функции (settimeout
, AJAX и т. Д.) Во время выполнения. Означает ли это, что помимо завершения обратного вызова обратного вызова также имеется дополнительная функциональность, которую Angular использует для обнаружения изменений?
Правильно ли мое нынешнее понимание? Если нет, то что не так?
1 ответ
Означает ли приведенное выше утверждение, что несколько асинхронных обратных вызовов, которые сложены в очереди событий, имеют один контекст выполнения и, следовательно, одно и то же значение для этого?
Нет. Рассматривайте контекст выполнения как простой (слишком упрощенный) объект, который используется всеми кодами, работающими в конкретной зоне. Например, во время начальной загрузки, когда угловой модуль инициализируется, Angular создает (разветвляется) зону, называемую "угловой". Кроме того, он устанавливает свойство isAngularZone: true. Вы можете думать об этом как о создании объекта, в котором установлено новое свойство. Теперь это свойство будет доступно всему коду, работающему (или запланированному для выполнения) в Angular, так же как он выполняется в угловой зоне. Однако если вы запустите свой код за пределами угловой зоны, это свойство будет недоступно.
Означает ли это, что помимо завершения обратного вызова обратного вызова также имеется дополнительная функциональность, которую Angular использует для обнаружения изменений?
Обратный звонок не имеет никакой дополнительной функциональности. Это способ, которым Zone.js обрабатывает ваш обратный вызов, что обеспечивает Angular дополнительные возможности, такие как определение, когда начинать цикл обнаружения изменений. Например, когда вы передаете обратный вызов в функцию setTimeout, он помещается в другую функцию с помощью Zone.js и заменяет его вместо вашего обратного вызова. Это API для исправления обезьян. Теперь, когда виртуальная машина JS вызывает обратный обратный вызов Zone.js, она выполняет различные операции перед фактическим вызовом вашего метода обратного вызова. Одной из таких операций является информирование зоны (в которой был запланирован этот обратный вызов) о вызове обратного вызова. Здесь, если эта зона "угловая", она генерирует события и запускает цикл обнаружения изменений.