与AngularJS有一个小问题。请参阅以下内容:
$http({method: 'GET', url: 'some/url/withJSON.json'})
.success(function(data)
{
$scope.data = data
$animations._load('arg1')
})
$ animations是一个注册服务,可以做一些事情。偶尔(可能20%)_load()方法将在绘制窗口/摘要循环完成之前运行,这意味着可视化尚未完成。通过使用10ms的setTimeout()包装_load(),这已经解决了,但是一旦摘要循环结束,AngularJS中是否有一种隐式/显式方式来执行回调?
答案 0 :(得分:4)
如果没有更多信息,我建议$timeout(fn)
将是最好的方法。它基本上确保在角度完成浏览器渲染处理后有一个中断。它大致相当于setTimeout(fn, 0)
,所以你已经建议过了,但它对于测试是不可靠的。
还有$scope.$evalAsync(fn)
通常会在当前摘要周期之后但在DOM呈现之前呈现。我倾向于选择$evalAsync
因为它让我更容易理解,并且在此期间不会允许其他非角点事件发生,但这取决于哪个适合你。
此answer包含有关这两种方法的更详细信息。