Javascript 在AngularJS中,有没有一种方法可以告诉我们是什么触发了消化循环?

Javascript 在AngularJS中,有没有一种方法可以告诉我们是什么触发了消化循环?,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在从事一个遗留AngularJS项目。代码太复杂/太大,无法在此显示。但我注意到,当摘要更改时调用的函数每秒被重复调用数百次,即使页面上根本没有发生任何变化。我在日志上写了些东西就知道了。例如,如果我包含如下函数: $rootScope.$watch(function (e) { console.log('digest changed' ); }); 看看控制台日志,“摘要更改”将被无休止地写入数千次。我知道这样持续地触发消化循环是不好的。有没有办法让我找出是什么原因造成的? 提前谢

我正在从事一个遗留AngularJS项目。代码太复杂/太大,无法在此显示。但我注意到,当摘要更改时调用的函数每秒被重复调用数百次,即使页面上根本没有发生任何变化。我在日志上写了些东西就知道了。例如,如果我包含如下函数:

$rootScope.$watch(function (e) {
   console.log('digest changed' );
});
看看控制台日志,“摘要更改”将被无休止地写入数千次。我知道这样持续地触发消化循环是不好的。有没有办法让我找出是什么原因造成的?
提前谢谢

我无法直接找到问题的答案。但是我用蛮力方法解决了这个问题,反复删除东西,直到问题消失,然后缩小范围,找出问题的原因。在我的例子中,它是由一个名为“无限滚动”的库引起的。

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

  • 针对特定的
    $scope
    $rootScope
    直接调用
    $digest()
    $apply()
  • angular自己的包装,如
    $timeout
    $https
    (实际上在引擎盖下使用#1)
  • #1和#2顶部的一些库
  • 用户启动的事件,如单击或按键
  • 一般情况下,我会从#1开始,尝试为您自己的代码中的每个
    $digest()
    /
    $apply()
    设置断点(或)


    如果它不起作用,我会在angular的
    digest()
    函数中添加logpoint-通过这种方法,可以很容易地捕捉到无限的调用队列,就像您的情况一样。

    我投票结束这个问题,因为用户自己调试了这个问题,并且提供的答案不太可能帮助任何其他用户。