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

Fra*_*man 27 angularjs angularjs-scope

我有一些代码没有按预期运行...我在AngularJS控制器中有一个事件监听器,如下所示:

$scope.$on("newClipSelected", function(e) {
    $scope.$apply(function() {
        $scope.isReady = true;
    });
});
Run Code Online (Sandbox Code Playgroud)

控制器的标记有一个ng-show ='isReady'.当此事件处理程序运行时,ng-show区域将按预期显示.但是,此事件处理程序不起作用:

$scope.$on("newClipSelected", function(e) {
    $scope.isReady = true;
});
Run Code Online (Sandbox Code Playgroud)

使用此事件处理程序,如果我使用调试器期望AngularJS范围,我确实看到$ scope.isReady = true,但是ng-show元素没有显示.

据我所知,$ scope.$ on实际上会调用$ watch/$.那么为什么我需要在这种情况下拨打$ apply?

该事件是通过在非angularJS异步完成事件中调用$ rootScope.$ broadcast()来触发的.

Jes*_*uez 23

不,角度不会触发$apply事件,因此如果$broadcast在角度的上下文之外调用,则需要$apply手动操作.

这里检查来源

  • 在这种情况下,`$ scope.$ apply`应该放在广播事件(而不是事件监听器)的非Angular代码周围,这样只执行一个摘要循环. (5认同)