Angular js在调用$apply()时出现太多递归错误

angular js too much recursion error on $apply() call

本文关键字:太多 错误 递归 js 调用 apply Angular      更新时间:2023-09-26

每当我触发作用域上的$apply时,都会抛出过多的递归错误。

控制台输出

:

Error: too much recursion
isArray@file://.../lib/angular.js:355:10
copy@file://.../lib/angular.js:551:9
copy@file://.../lib/angular.js:546:23
copy@file://.../lib/angular.js:563:28
...
Error: 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
$RootScopeProvider/this.$get</Scope.prototype.$digest@file://.../lib/angular.js:7756:19
$RootScopeProvider/this.$get</Scope.prototype.$apply@file://.../lib/angular.js:7926:13

递归错误太多

如果是由angularjs上的copy方法引起的,你的数据之间有一个循环引用。

在例子:

// you define your objects
var lot = new Lot();
var car = new Car();
// you assign create a relation to it
car.assign( lot );
lot.assign( car );
// lets assume that the data on the objects are like this
car; // {'lot':lot}
lot; // {'car':car}

$apply()被触发时,无论是你调用它还是角调用它,它都会在某处调用copy方法。

发生在copy的是复制每个属性和任何它可以复制的东西。当应用于我们上面的数据时,如果不停止,它将永远重复。

这会导致浏览器停止它并引发Too much recursion错误。

解决方案:

只获取呈现元素所需的数据。只传递需要的数据。

使用上面的示例代码,

var reduced = {'plate':car.get_plate(),'lot':car.get_lot_location()};
my_scope.addCar( reduced );

提示self:在调试时使用未简化的库版本。:)