我的应用程序中有一个名为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
。