“Безопасный” $apply в AngularJS
Если вы частенько натыкаетесь на $apply already in progress
, пока работаете с ангуляром (я замечаю, что чаще всего с этим сталкиваюсь, когда внедряю сторонние плагины, которые вызывают большое количество DOM событий), то вы можете использовать сервис safeApply
для проверки текущей фазы обработки в ангуляре, непосредственно перед выполнением вашей функции. Я обычно патчу $scope
объект основного контроллера, а Angular распространяет мои изменения в остальные части приложения за меня:
|
|
А затем просто заменяйте $apply
на safeApply
везде, где вам это необходимо:
|
|
В следующем примере, вы можете увидеть как присоединять safeApply
в виде Angular.JS сервиса к вашему модулю. В добавок, эта версия учитывает вызовы к $apply()
, которые не передают функцию в первом аргументе.
Чтобы им воспользоваться, присоедините следующее к вашему модулю:
|
|
и используйте его c помощью внедрения зависимостей:
|
|