При обсуждении преимуществ AngularJS двусторонняя привязка данных часто рекламируется как основное преимущество Angular по сравнению с другими структурами JS. Копаем глубже, документация предполагает, что этот процесс выполняется посредством грязной проверки, а не посредством событийных мер. Во-первых, кажется, что цикл дайджеста работает путем периодического срабатывания метода в фоновом режиме, проверяя все $watch
es в течение каждого цикла. Однако, читая далее, кажется, что цикл digest фактически инициируется rootScope.digest()
, который, в свою очередь, запускается $.apply
, который, в свою очередь, инициируется событием (!), Таким как событие onClick, вызванное через ng-click
.
Но как это может быть? Я думал, что Angular не использует прослушиватели изменений. Итак, как работает дайджест-цикл? Может ли Angular автоматически запускать цикл дайджеста внутри или цикл сбора данных, вызванный событиями? Если цикл дайджеста запускается автоматически, как часто он выполняется?
Некоторые пояснения:
- Я не спрашиваю о том, как цикл digest запускается при ручном привязке к изменениям. В этом случае, если вы хотите принудительно создать цикл дайджеста, вы можете сделать это, вызвав
$.apply()
- Я также не спрашиваю, как часто цикл цикла digest выполняется в ответ на пользовательские события. Например, если ng-model находится в поле ввода, Angular начнет цикл дайджеста, когда пользователь начнет вводить текст. Запутанная часть заключается в том, что для того, чтобы знать, что пользователь печатает, не использует ли Angular где-то на основе событийKeyUp?
- Я уже знаю, что существует предел в 10 циклов максимум за цикл дайджеста. Мой вопрос меньше о количестве циклов в цикле дайджеста, а о количестве циклов дайджеста, которые работают, скажем, в секунду.
- Бонусные вопросы: как цикл digest связан с циклом событий JavaScript? Периодически выполняется цикл событий JS в фоновом режиме? Является ли цикл дайджеста тем же самым, что и цикл событий, но только в контексте Angular? Это совершенно разные идеи?