我的应用程序中有一个名为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服务中使用它?
答案 0 :(得分:4)
$apply
必须告诉角度范围发生了变化。内置指令和服务(如ngClick
或$http
)在内部执行此操作。如果您对范围进行了应用(原文如此!)并且没有使用上述内置服务,那么您有责任自己致电$apply
。
因此,如果show
未在ngClick
处理程序中调用,那么您需要自己致电$apply
。