Phi*_*mas 5 javascript angularjs angularjs-digest
tl; dr:最初的问题是"如何在每个摘要周期触发回调?" 但潜在的问题更有趣,因为这回答了两个问题,我继续修改标题.=)
背景:我试图控制的角度,当编译完成后的HTML(搜索引擎优化预渲染的原因),解决所有的依赖,ngincludes,API调用等."最聪明"的方式到目前为止,我已经找到了后是通过检查是否消化周期已趋于稳定.
所以我想,如果我运行一个回调每一个消化周期触发时间,并就当前的时间,如果没有其他的周期是任意时隔(2000毫秒)内触发,我们可以认为编译稳定了,页面准备为SEO爬虫存档.
到目前为止的进展:我想看看$ rootScope.$$阶段会做但是,虽然很多交互应该触发那个观察者,但我发现它只在第一次加载时触发一次.
这是我的代码:
app.run(function ($rootScope) {
var lastTimeout;
var off = $rootScope.$watch('$$phase', function (newPhase) {
if (newPhase) {
if (lastTimeout) {
clearTimeout(lastTimeout);
}
lastTimeout = setTimeout(function () {
alert('Page stabilized!');
}, 2000);
}
});
Run Code Online (Sandbox Code Playgroud)
解决方案:添加了Mr_Mig的解决方案(荣誉)以及一些改进.
app.run(function ($rootScope) {
var lastTimeout;
var off = $rootScope.$watch(function () {
if (lastTimeout) {
clearTimeout(lastTimeout);
}
lastTimeout = setTimeout(function() {
off(); // comment if you want to track every digest stabilization
// custom logic
}, 2000);
});
});
Run Code Online (Sandbox Code Playgroud)
小智 3
我实际上不知道我的建议是否会回答您的问题,但您可以简单地将侦听器传递给$watch将在每次迭代时调用的函数:
$rootScope.$watch(function(oldVal, newVal){
// add some logic here which will be called on each digest cycle
});
Run Code Online (Sandbox Code Playgroud)
看看这里:http://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |