最近在浏览网页时,我找到了一个解决方案,即没有获得" $ 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()的更改不会对绑定产生任何影响。
答案 0 :(得分:0)
如果那是你的问题,你将找不到比这个黑客更干净的东西来处理'可能在消化期间'的回调。
真正的解决方案是修复着名的“$ digest has in progress”错误的根本原因,例如使用$ timeout和false作为最后一个参数,或者_.defer,等等。