解决方法" $ digest已在进行中"没有$ timeout

时间:2015-05-26 09:54:21

标签: angularjs

最近在浏览网页时,我找到了一个解决方案,即没有获得" $ digest已经在进行中#34;没有$ timeout的错误。解决方案如下:

$scope.safeApply = function(fn) {
  var phase = this.$root.$$phase;
  if(phase == '$apply' || phase == '$digest') {
    if(fn && (typeof(fn) === 'function')) {
      fn();
    }
  } else {
    this.$apply(fn);
  }
};

我是从here

取的

我的问题是:这是一个有效的解决方案吗?我想知道如果fn()内部的scope属性更改已经被消化并且摘要仍在进行中会发生什么。在这种情况下,fn()的更改不会对绑定产生任何影响。

1 个答案:

答案 0 :(得分:0)

如果那是你的问题,你将找不到比这个黑客更干净的东西来处理'可能在消化期间'的回调。

真正的解决方案是修复着名的“$ digest has in progress”错误的根本原因,例如使用$ timeout和false作为最后一个参数,或者_.defer,等等。