Иногда мне нужно использовать $scope.$apply
в моем коде, и иногда он выдает ошибку "digest is in progress". Итак, я начал искать способ и нашел этот вопрос: AngularJS: Предотвращение ошибки $digest уже выполняется при вызове $scope. $Apply(). Однако в комментариях (и на wiki-странице angular) вы можете прочитать:
Не выполняйте if (! $scope. $$ phase) $scope. $apply(), это означает вашу область $. $apply() недостаточно высок в стеке вызовов.
Итак, у меня есть два вопроса:
- Почему именно это анти-шаблон?
- Как можно безопасно использовать $scope. $apply?
Еще одно "решение" для предотвращения ошибки "дайджест уже выполняется", похоже, использует $timeout:
$timeout(function() {
//...
});
Это путь? Это безопаснее? Итак, вот реальный вопрос: как я могу полностью устранить возможность ошибки "дайджест уже в процессе"?
PS: Я использую $scope. $применяются в не-угловых обратных вызовах, которые не являются синхронными. (насколько я знаю, это ситуации, когда вы должны использовать $scope. $apply, если вы хотите, чтобы ваши изменения были применены)