JavaScript运行时错误:[$ rootScope:infdig] 10 $ digest()迭代达成。中止!观察者在最近5次迭代中被解雇:[]

时间:2018-01-22 08:42:38

标签: javascript c# asp.net angularjs angular-ui-router

嗨,我有以下的rute

 options.assetIds = options.assetIds.join(',');
 return $state.go(parentState + '.add-to-collection',
                options,
                null,
                {
                    title: 'Add to collection',
                    backStack: 'collections',
                    sideStack: true //use a different sidestack!
                })
                .then(app.focus);
        };

一切似乎工作正常,直到option.assetIds变大,如果超过400-500个元素,它会显示异常:

Exception was thrown at line 14682, column 13 in ms-appx://showpadnv.showpad/public/vendor/angular/angular-execunsafe-1.3.20.js
0x800a139e - JavaScript runtime error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []

可能是由于查询参数中的资产ID数量导致目标网址变得过大而导致的。谁能帮我弄清楚发生了什么?感谢!!!

1 个答案:

答案 0 :(得分:0)

我在AngularJS开发之外的某个时间但是因为我记得在与$ digest / Watchers相关的错误中苦苦挣扎,这个问题通常是由Angular自动引起的(通过它的内部设计)将观察者添加到我不希望它的东西上当事情变得更复杂或者在每次调用时返回不同的结果时,导致无限的摘要周期(infdig错误) - 必须更多地了解上下文,但我猜你的情况是它正在观察{{ 1}}或options.assetIds的结果;在任何一种情况下,您可能会通过从选项中省略$state.go并将其存储到service/factory中来帮助它,然后将其从assetIds控制器中的服务中撤出,就像这样:

add-to-collection

(如果你使用的是ui-router,事件名称可能是$scope.$on('$viewContentLoaded', function () { assetIds = $carriageService.getAssetIds(); }); 。)

有关'$stateChangeSuccess'错误的其他信息,请参阅this SO answer