10 $digest() 迭代在 IE 中达到错误。不知道为啥

Posted

技术标签:

【中文标题】10 $digest() 迭代在 IE 中达到错误。不知道为啥【英文标题】:10 $digest() iterations reached error in IE. Can't figure out why10 $digest() 迭代在 IE 中达到错误。不知道为什么 【发布时间】:2016-09-16 12:33:46 【问题描述】:

我有一个功能刚刚被报告无法在 Internet Explorer 中运行。不知道它有多久没有工作了,但我想从一开始就是这样。我可以在IE11中验证。

我的应用正在使用 angularjs 1.3.17。

表单上有一个名为reset 的按钮。当他们点击它时,它会调用vm.cancel(),如下所示:

function () 
    vm.working = true;
    vm.disableActions = true;
    manualEntryApi.deleteWageAccounts(vm.selectedEnterprise.RecordID)
    .success(
        function (data, status, headers, config) 
            vm.working = false;
            vm.disableActions = false;
            if (typeof (Storage) !== "undefined") 
                localStorage.setItem("filename", "");
            
            window.location.href("/FormEntry/#/ManualEntry/?ID="+vm.selectedEnterprise.RecordID);                                             
    )
    .error(
        function (data, status, headers, config) 
            vm.working = false;
            vm.disableActions = false;
            vm.serverErrors = data;
            vm.serverErrorMessage = "Error clearing records.";
            vm.serverErrorMessage2 = "";        
            vm.openErrorModal = true;
    );
);

它将记录 ID 发布到 API,该 API 在后端执行大量操作。只要成功,它就会返回一个200

成功后,它会向localStorage写入一个空字符串,然后有效地进行页面刷新。您可以将 window.location.href 替换为 window.location.reload(),因为它的作用相同。

但是,在重新加载时,它给了我$digest 循环错误。我想这可能是 ng-init 发生的事情,但我注释掉了整个 init 代码块,它仍然是错误的。不知道发生了什么。

知道为什么会这样吗?我尝试升级到 angular 1.4.0,但由于这是我继承的遗留应用程序,升级时会引发很多意大利面条和 很多 错误,所以我希望让它工作在 1.3.17 中。

我知道有类似这样的帖子通常以 OP 在 for 循环中定义一个数组并由于它重新消化每个循环而出现此错误而告终。但我现在在 init 上执行的唯一代码是:

    vm.model = ;
    vm.model.PaymentInfo = ;
    vm.selectedEnterprise = $location.search();
    vm.years = [];
    vm.selectedEnterprise.RecordID = $routeParams.ID;
    vm.EitOtherPageTotal = 0.0;
    vm.LstOtherPageTotal = 0.0;
    vm.WageOtherPageTotal = 0.0;
    vm.pageNumber = 1;
    vm.disableActions = false;
    vm.working = false;
    vm.openErrorModal = false;
    vm.serverErrors = [];
    vm.serverErrorMessage = "";
    vm.serverErrorMessage2 = "";
    vm.referenceName = "";
    vm.fileID = null;
    vm.sortOverride = null;
    vm.validFilename = true;
    vm.submitted = false; 

只是一些变量初始化。

【问题讨论】:

是什么让您认为错误与您发布的代码有关? 尝试缩小范围。剪切代码,测试,还是失败了吗?削减更多的代码。它有效吗?你知道去哪里找。 我们从 1.2 到 1.4 的升级最初被认为是一场噩梦,因为所有的错误,但我们发现修复其中几个可以一次性解决所有其他问题,也许值得研究如果你还没有,再多一点? @MatthewGreen 我其实不一定。我完全迷失了这个。 @CyrilGandon,我删除了除此之外执行的所有代码,但它仍在某处发生 【参考方案1】:

试试 $window.location.reload();

【讨论】:

【参考方案2】:

我阅读了一些其他答案和类似问题,以 Angular 重新加载页面的公认方法是 $route.reload();,也许这种方法和使用 Angular 期望事情发生的方式会有所帮助...

How to reload or re-render the entire page using AngularJS

Angular JS: IE Error: 10 $digest() iterations reached. Aborting

【讨论】:

以上是关于10 $digest() 迭代在 IE 中达到错误。不知道为啥的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs - 错误:达到 10 次 $digest() 迭代。中止

如何解决 Angular “10 $digest() 迭代次数达到”错误

使用 angular 指令会导致错误:达到 10 次 $digest() 迭代。中止

AngularJs 错误:“达到 10 个 $digest() 迭代。中止!”

错误:达到 10 次 $digest() 迭代。中止!在最后 5 次迭代中触发的观察者:过滤器中的 []

错误:达到 10 次 $digest() 迭代。中止