Я пытаюсь лучше понять нюансы использования службы $timeout в Angular как своего рода метод "безопасный метод $apply". В основном в сценариях, где фрагмент кода может выполняться в ответ на событие Angular или событие без angular, такое как jQuery или какое-либо стандартное событие DOM.
Как я понимаю вещи:
- Копирование кода в $scope. $apply отлично работает для сценариев, где вы еще не находятся в цикле дайджеста (событие jQuery), но будет вызывать ошибку, если выполняется дайджест.
- Код обложки в вызове $timeout() без параметра задержки работает ли уже в цикле дайджест или нет
Посмотрев исходный код Angular, он выглядит так: $timeout делает вызов $rootScope. $apply().
- Почему не $timeout() также вызывает ошибку, если цикл дайджеста уже выполняется?
- Лучше всего использовать $scope. $apply(), если вы точно знаете, что дайджест не будет выполняться, и $timeout(), когда это необходимо для безопасности в любом случае?
- Является ли $timeout() действительно приемлемым "безопасным", или есть ли gotchas?
Спасибо за понимание.