我有一些代码没有按预期运行......我在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()触发事件。
答案 0 :(得分:23)
不,角度不会对事件发起$apply
因此如果在角度上下文之外调用$broadcast
,您需要手动$apply
检查来源here
答案 1 :(得分:2)
$on
和$broadcast
不会为您致电$apply
,您需要自己致电。我不确定为什么会这样,但我的猜测是因为摘要有点贵,而且为每个事件运行一个摘要周期都是成本。