RangeError:超出最大调用堆栈大小

时间:2013-04-12 03:44:19

标签: angularjs

我想这意味着有一个循环引用,但对于我的生活,我无法猜测如何解决它。

有人有什么想法吗?

http://plnkr.co/edit/aNcBcU?p=preview

检查Chrome中的调试控制台(例如),您将看到错误。 违规行是

 scope.map = map;

scope.map通过

在控制器上“监视”
$scope.$watch("options.map", function (map) { ... }, true);

2 个答案:

答案 0 :(得分:17)

这是因为你要比较对象的平等而不是参考。将您的$watch声明更改为:

$scope.$watch("options.map", function (map) {
    if (map === undefined) {
        alert("map has no value");
    } else {
        alert("map is defined");
    }
});

答案 1 :(得分:6)

$ watch函数的第三个参数告诉我们如何比较观察对象。 错误仅供参考。 True 表示递归相等,如果对象包含循环引用,则超过最大堆栈大小。例如:

var a = {ref:b};
var b = {ref:a};
$scope.$watch('b', function(){
  //code here will never called, because stack overflow when comparing the object b. 
}, true)