在AngularJS中,有没有一种方法可以判断是什么触发了摘要循环



我正在做一个遗留的AngularJS项目。代码太复杂/太大,无法在此处显示。但我注意到,当摘要发生变化时调用的函数每秒会被重复调用数百次,即使页面上什么都没有发生。我在日志上写了一些东西就知道了这一点。例如,如果我包含这样的函数:

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

查看控制台日志,"摘要已更改"将被无休止地写数千次。我知道这样不断地触发消化周期是不好的。有什么办法让我弄清楚是什么原因造成的吗?提前感谢!

我无法直接找到问题的答案。但我能够用蛮力的方法解决这个问题,反复删除内容,直到问题消失,然后将其缩小到导致问题的原因。就我而言,它是由一个名为无限卷轴的库引起的。

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

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

在一般情况下,我会从#1开始,并尝试为您自己的代码中的每一个$digest()/$apply()设置断点(或日志点(。

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

相关内容

最新更新