AngularJS-为什么我需要$ scope。$适用于$ scope。$ on?

时间:2014-03-14 19:24:54

标签: angularjs angularjs-scope

我有一些代码没有按预期运行......我在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?

在非angularJS异步完成事件中调用$ rootScope。$ broadcast()触发事件。

2 个答案:

答案 0 :(得分:23)

不,角度不会对事件发起$apply因此如果在角度上下文之外调用$broadcast,您需要手动$apply

检查来源here

答案 1 :(得分:2)

$on$broadcast不会为您致电$apply,您需要自己致电。我不确定为什么会这样,但我的猜测是因为摘要有点贵,而且为每个事件运行一个摘要周期都是成本。