Задать вопрос

Angular. Обязательно ли помещать код внутри $apply?

Приветствую.

Есть некоторые места в коде, где необходимо использовать $apply. Чтобы не получать ненужные ошибки, проверяю не выполняется ли сейчас $apply или $digest if(!scope.$phase && !scope.$root.$phase). Из-за этого условия выполнять код внутри $apply становится не очень удобно, т.к приходится дублировать код.
if(!scope.$phase && !scope.$root.$phase){
scope.$apply(function(){
/* some code  */
});
}else{
/* some code */
}

Поэтому сейчас использую такую конструкцию
/* some code */
if(!scope.$phase && !scope.$root.$phase){
scope.$apply();


Какие потенциальные проблемы могут возникнуть, если вызывать $apply после выполнения кода?
Правильно ли я понимаю, что вызов внутри $apply актуален для асинхронного кода, а в случае последовательного выполнения проблем быть не должно?
  • Вопрос задан
  • 2727 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@kazmiruk
Так делать плохо https://github.com/angular/angular.js/wiki/Anti-Pa...
Можно сделать проще

$timeout(function() {
код
});

Эффект будет такой же. Ну и все это актуально для кода, который изменяет состояние извне.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Akuma
@Akuma
Веб-программист
Поидее никакой разницы нет. Сам пользуюсь вторым способом уже довольно давно и ни разу небыло из-за этого проблем.
Ответ написан
Комментировать
@lega
Если ваш код не вызовет бесконечную рекурсию/циклы, то проблем не будет.
В отличие от $timeout, будет работать быстрее, т.к. с $timeout будет происходить +1 перерисовка, заново запускается $digest, ну и все это откладывается по времени. Хотя в большинстве случаев это все мелочи.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы