嗨,我有以下车辙
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答案。