Ответ 1
Нет, angular не запускает $apply
для событий, поэтому, если $broadcast
вызывается вне контекста angular, вам нужно будет $apply
вручную.
Проверьте источник здесь
У меня есть код, который не ведет себя так, как ожидалось... У меня есть прослушиватель событий в контроллере AngularJS следующим образом:
$scope.$on("newClipSelected", function(e) {
$scope.$apply(function() {
$scope.isReady = true;
});
});
Разметка контроллера имеет ng-show = 'isReady'. Когда этот обработчик событий запускается, область ng-show показывает, как ожидалось. Однако этот обработчик событий не работает:
$scope.$on("newClipSelected", function(e) {
$scope.isReady = true;
});
С помощью этого обработчика событий, если я использую отладчик для ожидания области AngularJS, я вижу, что $scope.isReady = true, однако элемент ng-show не отображается.
Его понимание того, что $scope. $on на самом деле вызовет $watch/$, при необходимости. Итак, зачем мне призывать $apply в этом случае?
Событие запускается вызовом $rootScope. $broadcast() в несингулярном событии асинхронного завершения.
Нет, angular не запускает $apply
для событий, поэтому, если $broadcast
вызывается вне контекста angular, вам нужно будет $apply
вручную.
Проверьте источник здесь
$on
и $broadcast
не звонит $apply
для вас, вам нужно позвонить ему самостоятельно. Я не уверен, почему это так, но я предполагаю, что это потому, что дайджест немного дороже, и для каждого события будет стоить цикл дайджеста.