JavaScript 运行时错误:[$rootScope:infdig] 达到 10 次$digest() 迭代.中止!



嗨,我有以下车辙

 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 数量导致目标 URL 变得太大。 谁能帮我弄清楚发生了什么?谢谢!!!

我有一段时间不在 AngularJS 开发之外,但我记得与$digest/观察者相关的错误作斗争,问题通常是由 Angular 自动(通过它的内部设计(在我不希望它的东西上添加观察者引起的,当东西更复杂或每次调用返回不同的结果时,会导致无限的摘要循环(infdig错误( - 必须更多地了解上下文,但我猜在你的情况下是观看options.assetIds$state.go的结果;在任何一种情况下,您都可以通过从选项中省略assetIds并将其存储到服务/工厂中,然后将其从add-to-collection控制器内的服务中撤出来帮助它,如下所示:

$scope.$on('$viewContentLoaded', function () {
  assetIds = $carriageService.getAssetIds();
});

(如果您使用的是 ui 路由器,则事件名称可能会'$stateChangeSuccess'

有关infdig错误的更多信息,请参阅此SO答案。

最新更新