Javascript 如何检查摘要周期是否已稳定(又称“是否已完成编译?”)

Javascript 如何检查摘要周期是否已稳定(又称“是否已完成编译?”),javascript,angularjs,angularjs-digest,Javascript,Angularjs,Angularjs Digest,tl;dr:最初的问题是“如何在每个摘要周期触发回调?”但潜在的问题更有趣,因为这两个问题都得到了回答,我继续修改了标题。=) 上下文:在解析完angular的所有依赖项、nginclude、API调用等之后,我试图控制angular何时完成HTML编译(出于SEO预渲染原因)。 到目前为止,我发现的最“聪明”的方法是通过检查摘要周期是否已经稳定。因此我认为,如果每次触发摘要周期时都运行回调并保持当前时间,如果在任意间隔(2000毫秒)内没有触发其他周期,我们可以考虑编译已经稳定,页面准备好为S

tl;dr:最初的问题是“如何在每个摘要周期触发回调?”但潜在的问题更有趣,因为这两个问题都得到了回答,我继续修改了标题。=)

上下文:在解析完angular的所有依赖项、nginclude、API调用等之后,我试图控制angular何时完成HTML编译(出于SEO预渲染原因)。 到目前为止,我发现的最“聪明”的方法是通过检查摘要周期是否已经稳定。因此我认为,如果每次触发摘要周期时都运行回调并保持当前时间,如果在任意间隔(2000毫秒)内没有触发其他周期,我们可以考虑编译已经稳定,页面准备好为SEO爬虫存档。

到目前为止的进展:我认为观看$rootScope。$$阶段可以,但是,虽然很多交互应该触发该观看者,但我发现它在第一次加载时只触发一次

这是我的密码:

app.run(函数($rootScope){
var最后超时;
var off=$rootScope.$watch(“$$phase”,函数(newPhase){
如果(新阶段){
如果(上次超时){
clearTimeout(lastTimeout);
}
lastTimeout=setTimeout(函数(){
警报(“页面稳定!”);
}, 2000);
}
});


解决方案:添加了公司的解决方案(荣誉)以及一些改进。


实际上,我不知道我的建议是否能回答您的问题,但您可以简单地将侦听器传递给
$watch
函数,该函数将在每次迭代时调用:

$rootScope.$watch(function(oldVal, newVal){
    // add some logic here which will be called on each digest cycle
});

看看这里:

谢谢!我还没有想到我可以使用watcher作为触发器…就像一个符咒一样工作!=)请注意,它会为每个$digest触发一次,而不是为每个$digest周期触发一次。一个周期可以多次调用$digest。我知道。希望我能想出更有效的方法…谢谢!
$rootScope.$watch(function(oldVal, newVal){
    // add some logic here which will be called on each digest cycle
});