一尘不染

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

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世界”之外时才需要这样做,那么为什么在我的Angular Service中需要它?


阅读 227

收藏
2020-07-04

共1个答案

一尘不染

$apply告诉angular示波器发生了变化是很有必要的。内置指令和服务可以在内部执行ngClick$http执行。如果您对范围应用(很简单!)更改并且不使用上述内置服务,则您有责任给$apply自己打电话。

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

2020-07-04