По моему $evalAsync
, $evalAsync
будет ставить в очередь изменения текущего цикла дайджеста, если это возможно, если не потом к следующему.
Итак, в каких случаях я бы использовал $scope.$apply
?
Оба они выполняют дайджест на $rootScope
, но у $evalAsync
есть возможность сделать это быстрее, подключившись к текущему циклу дайджеста, который звучит лучше в 99% случаев.
Я видел эту информацию ниже ссылки, я чувствовал себя хорошо, это может пригодиться вам! http://www.codingeek.com/angularjs/angular-js-apply-timeout-digest-evalasync/
$evalAsync()
- это новая функция, впервые введенная в AngularJS 1.2.X, и, на мой взгляд, это ловкая версия $timeout()
.
Прежде чем $evalAsync()
вошел в картину, команда AngularJS рекомендовала использовать $timeout()
в случае проблемы цикла дайджеста, описанной выше.
Поскольку AngularJS развился для больших приложений, и цикл дайджест стал распространенным, а затем Angular team представила $evalAsync()
. Эта функция будет оценивать выражение в течение текущего цикла или следующего.
Предположим, вы вызываете какое-то выражение в $evalAsync()
и каждый цикл дайджеста происходит одновременно. Все выражения из $evalAsync()
будут добавлены в очередь, и они будут частью текущего жизненного цикла, и никакой новый цикл дайджеста не будет вызван. Вот почему $evalAsync()
делает его более эффективным, поскольку он уменьшает возможность создания нового дайджеста каждый раз.
Если никакого дайджеста не происходит, он будет работать подобно $ timeout. Он создаст обратный вызов со временем по умолчанию (10 мс), и после этого времени (10 мс) будет новый дайджест на rootScope
и все выражения будут оценены.