为什么我需要`$rootScope$apply()`在我的Angular Service中



我的应用程序中有一个名为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世界"之外时才需要它,那么为什么我需要在我的Angular Service中使用它呢?

$apply有必要告诉angular作用域发生了更改。像ngClick$http这样的内置指令和服务在内部执行此操作。如果您对作用域应用(原文如此!)更改,并且不使用前面提到的内置服务,那么您有责任自己调用$apply

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

最新更新