我想这意味着有一个循环引用,但对于我的生活,我无法猜测如何解决它。
有人有什么想法吗?
http://plnkr.co/edit/aNcBcU?p=preview
检查Chrome中的调试控制台(例如),您将看到错误。 违规行是
scope.map = map;
scope.map通过
在控制器上“监视”$scope.$watch("options.map", function (map) { ... }, true);
答案 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)