Javascript 无范围刷新的角度间隔
我在Angular服务中有一个$interval,它检查数组是否为空,并对数组的每个数据运行一个脚本。这很简单。我的问题是每次$interval运行时,我的作用域都会刷新一些指令“再次运行”。如果我使用javascript setInterval函数而不是$interval,结果就是我所期望的。但我想使用$interval,因为我不知道如何在运行karma测试时模拟对setInteval的调用。Javascript 无范围刷新的角度间隔,javascript,angularjs,angularjs-directive,setinterval,karma-runner,Javascript,Angularjs,Angularjs Directive,Setinterval,Karma Runner,我在Angular服务中有一个$interval,它检查数组是否为空,并对数组的每个数据运行一个脚本。这很简单。我的问题是每次$interval运行时,我的作用域都会刷新一些指令“再次运行”。如果我使用javascript setInterval函数而不是$interval,结果就是我所期望的。但我想使用$interval,因为我不知道如何在运行karma测试时模拟对setInteval的调用。 关于如何使用$interval满足此需求,您有什么想法吗?如果不查看代码,很难确定,但我相信您可以在
关于如何使用$interval满足此需求,您有什么想法吗?如果不查看代码,很难确定,但我相信您可以在调用
$interval
时将第四个参数(invokeApply
)设置为false
。这应该可以防止对$scope.$apply()
的幕后调用,我相信这就是正在发生的事情
有关更多详细信息,请参阅。我已经尝试过此解决方案,但不起作用。范围将在每个时间间隔继续刷新。抱歉,我不允许发布任何代码:-(您是否可以在一个简单的示例中重现该行为,而不发布实际的公司代码?您可以使用此JSFIDLE作为起始模板:下面是一个我重现问题的小提琴:正如您在日志中看到的,由于控制器上的间隔,指令每秒运行一次。(我们每秒都会在日志中看到加载的url)原来
invokeApply
参数没有按照1.2.x版和更早版本中的设计工作。我更新了JSFIDLE以使用1.3.1版,并在调用$interval
时添加了、0、false
参数,这似乎可以解决问题。下面是、和。我在另一篇文章中问了这个问题。下面是a回答: