我有一个好奇的问题,我有一些提示,但我需要你的灯。
实际上,我有一个包含两个ng-include指令的页面,它们指向另一个带有相应控制器的页面。 每个嵌套控制器都有一个刷新图标,我用ng-class和$ scope变量控制"刷新":
<i class="fa fa-refresh color-blue animation-fade" ng-show="refresh" ng-class="{'fa-spin': refresh==true }"></i>
在我的主页上,当我做一个&#34;全球行动&#34;这将影响所有嵌套控制器,i $向每个控制器发出多个事件。每个控制器都会调用webapi来获取一些数据。 在通话期间,resfresh图标已激活,因此 $ scope.refresh true 。
每个控制器等待他的承诺决定将 $ scope.refresh 设为 false 。
但这是一个奇怪的问题。有时,即使$ scope.models被设置为false,刷新图标也会在其中一个嵌套控制器上保持活动状态(或者全部,或者都不活动)。
当每个控制器快速调用webapi时会发生这种情况。我认为多个响应是在几乎同时生成的,并且当另一个嵌套控制器实际刷新视图($ apply())时修改范围。所以angularjs&#34;松散&#34;一些事件,不要重新刷新它。
我是对的吗?如果是,我该怎么办呢?
我试图在每个 $ scope.refresh = false 上调用 $ apply()但是,AngularJS会抛出异常( $ digest()is已经在运行)。这个逻辑但是,我怎样才能安全地强制 $ apply()?
感谢您的帮助。 :)
答案 0 :(得分:0)
要安全地强制$apply
,您可以使用$evalAsync
或$applyAsync
...这样您就可以避免该错误,因为它会创建一个q。老实说,如果您使用正常的$ http调用来获取在promise完成时自动触发$ digest循环的数据,那么我认为问题不在那里,所以success()回调中的任何内容都是安全的在$ scope中传播。