为什么我的角色服务中需要`$ rootScope。$ apply()`?

时间:2014-10-15 17:09:10

标签: angularjs

我的应用程序中有一个名为Overlay的弹出式模态服务。它只是翻转$rootScope上的一些布尔值,导致2个指令适当地显示/隐藏。这是显示新模态时调用的函数

 overlay.NewGears = {
        show: function(msg){
            _displayBackground();

            scope.message = msg;
            scope.feedback = null;
            scope.url = '/partials/Common/gears.html';

            $rootScope.$apply(function(){
                $rootScope.modalVisible = true;
            });


        },
        hide: function(){
            _hideBackground();

            $rootScope.modalVisible = false;
        }
    };

正如您所看到的,我显示了不透明的背景,然后我设置了一个名为scope的变量,稍后通过DI传递给我的指令。但后来我注意到我的模态在它应该出现时没有出现,而是在modalVisible变量设置为true后出现在NEXT摘要循环中。然后,我必须在作业周围添加$apply()才能使其正常工作。但是,我认为只有当我们在“角度世界”之外时才需要这个,所以为什么我需要在Angular服务中使用它?

1 个答案:

答案 0 :(得分:4)

$apply必须告诉角度范围发生了变化。内置指令和服务(如ngClick$http)在内部执行此操作。如果您对范围进行了应用(原文如此!)并且没有使用上述内置服务,那么您有责任自己致电$apply

因此,如果show未在ngClick处理程序中调用,那么您需要自己致电$apply