Одноразовая привязка к методу генерации случайных значений в Angular

0

Я пытался подключить временную функцию для тестирования, которая вернула случайную дату для отображения на мой взгляд. Это было ошибкой, потому что она застряла в цикле, поэтому я подумал, что переключение на одностороннее связывание будет работать, но проблема не исчезнет. Фактическая ошибка:

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

При привязке к вызову метода, который возвращает случайное значение, почему Angular застревает в бесконечном цикле? Должно ли выражение перестать оценивать, как только оно вернет значение, которое не undefined?

Пример plunk

Примечание. Я не ищу исправления. Я уже заменил вызов функции одноразовым случайным значением, но мне любопытно узнать, почему одноразовая привязка продолжает оцениваться после того, как модель должна иметь (из моего понимание) стабильный.

Теги:

1 ответ

1
Лучший ответ

Чтобы понять, почему это происходит, вам нужно понять цикл дайджеста.

Грязная проверка

Угловая основана на "грязной проверке". Угловая, по сути, выполняет итерацию по всем свойствам в $scope чтобы увидеть, что изменилось. Если есть какое-либо изменение в каком-либо свойстве, Angular запускает всех наблюдателей за этими свойствами, чтобы сообщить им об изменении

И поскольку часы могут изменять свойства в области, Angular запускает очередной раунд грязной проверки после того, как часы сделаны. Цикл пищеварения прекращается, когда он повторяется по всем свойствам, и он видит, что ни один из них не изменился.

Бесконечный дайджест возникает, когда часы всегда устанавливают новое значение для свойства, которое непрерывно происходит в Math.random()

  • 0
    Итак, одностороннее связывание данных не влияет на цикл дайджеста? Я думал, что идея заключается в том, чтобы уменьшить количество наблюдателей.
  • 0
    AngularJS постоянно отслеживает все, что связано с $ scope. Вот как работает фреймворк

Ещё вопросы

Сообщество Overcoder
Наверх
Меню