$ apply()调用时,angular js过多的递归错误

时间:2016-08-23 04:07:35

标签: javascript angularjs recursion

每当我在我的作用域上触发$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

1 个答案:

答案 0 :(得分:0)

  

递归错误太多

如果导致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 );

提示自己:在调试时使用未经编译的库版本。 :)