在AngularJS中,是否有办法告诉触发摘要循环的原因?

时间:2020-09-22 14:41:58

标签: javascript angularjs angularjs-scope

我正在做一个旧的AngularJS项目。代码太复杂/太大,无法在此处显示。但是我注意到,即使摘要页面上什么都没有发生,摘要更改被每秒永远重复调用数百次时调用的函数。我从向日志中写入内容知道这一点。例如,如果我包含这样的函数:

$rootScope.$watch(function (e) {
   console.log('digest changed' );
});

并查看控制台日志,“摘要已更改”将被无休止地写入数千次。我知道连续触发这样的摘要循环并不是很好。有什么办法让我弄清楚是什么原因造成的? 预先感谢!

2 个答案:

答案 0 :(得分:0)

我无法直接找出问题的答案。但是我能够使用强力方法解决问题,方法是反复删除内容直到问题消失,然后将其范围缩小到导致问题的原因。就我而言,这是由名为infinite-scroll的库引起的。

答案 1 :(得分:0)

脏检查是由几个触发器启动的:

  1. 针对特定的$digest()$apply()直接调用$scope$rootScope
  2. angular自己的包装器,例如$timeout$https(实际上在内部使用#1)
  3. #1和#2顶部的一些库
  4. 用户启动的事件,例如点击或按键

通常,我将从#1开始,尝试在您自己的代码中为每个$digest() / $apply()设置断点(或logpoints)。

如果它不起作用,我将在log的digest()函数内添加日志点-通过这种方法,很容易像您的情况一样捕获无限调用队列。