Ошибки в AngularJS часто вызывают бесконечные циклы
Часто, когда я получаю сообщение об ошибке в Angular, это вызывает бесконечный цикл в браузере и может заблокировать все, пока я не смогу остановить процесс. Обычно это происходит при вызове функции из шаблона с чем-то вроде ng-show.
<div ng-show="ifCanTakeAction()">
<button ng-click="takeAction()></button>
</div>
Если функция ifCanTakeAction получает исключение, она может стать бесконечным циклом.
Очевидно, что исправить ошибку в ifCanTakeAction довольно просто, но очень раздражает, что мой компьютер каждый раз проходит короткую сиесту.
Я предполагаю, что цикл появляется из-за грязной проверки. Что-то в аварийном завершении ifCanTakeAction вызывает еще один раунд проверок, который снова завершается аварийно, до бесконечности. Или это просто грязные проверки, которые стреляют непрерывно. Но как избежать этой ошибки? Это просто не рекомендуется запускать функцию из шаблона, как это? Часто я вместо этого назначаю модель в контроллере и смотрю на это, но иногда у вас есть случай, когда результат может измениться, когда пользователь взаимодействует со страницей, поэтому вместо этого я основываю ее на функции.
Так это правильно? Это грязная проверка, которая вызывает эту проблему? Будут ли часы работать лучше (я предполагаю, что это получит ту же самую основную проблему)? Есть ли хороший способ поймать и предотвратить бесконечные циклы в целом?
1 ответ
ifCanTakeAction()
следует заменить на флаг canTakeAction
, Мало того, что это решит сбой браузера, он будет работать лучше. В настоящее время angular вынужден вызывать эту функцию в каждом цикле дайджеста. Гораздо больше смысла использовать логическое значение и обновлять его в контроллере при необходимости.