Подтвердить что ты не робот

AngularJS - зачем мне $scope. $Применять в пределах $scope. $On?

У меня есть код, который не ведет себя так, как ожидалось... У меня есть прослушиватель событий в контроллере 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() в несингулярном событии асинхронного завершения.

4b9b3361

Ответ 1

Нет, angular не запускает $apply для событий, поэтому, если $broadcast вызывается вне контекста angular, вам нужно будет $apply вручную.

Проверьте источник здесь

Ответ 2

$on и $broadcast не звонит $apply для вас, вам нужно позвонить ему самостоятельно. Я не уверен, почему это так, но я предполагаю, что это потому, что дайджест немного дороже, и для каждого события будет стоить цикл дайджеста.