$apply告诉angular示波器发生了变化是很有必要的。内置指令和服务可以在内部执行ngClick或$http执行。如果您对范围应用(很简单!)更改并且不使用上述内置服务,则您有责任给$apply自己打电话。
因此,例如,如果show未在ngClick处理程序中调用,那么您需要调用$apply自己。
解决方法我的应用程序中有一个弹出模式服务,名为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中需要它?