我想这意味着有一个循环引用,但对于我的生活,我无法猜测如何解决它.
有人有主意吗?
http://plnkr.co/edit/aNcBcU?p=preview
检查Chrome中的调试控制台(例如),您将看到错误.违规行是
scope.map = map;
Run Code Online (Sandbox Code Playgroud)
scope.map正在控制器上"监视"
$scope.$watch("options.map", function (map) { ... }, true);
Run Code Online (Sandbox Code Playgroud)
Roy*_*els 18
这是因为你要比较对象的平等而不是参考.将您的$watch
陈述改为:
$scope.$watch("options.map", function (map) {
if (map === undefined) {
alert("map has no value");
} else {
alert("map is defined");
}
});
Run Code Online (Sandbox Code Playgroud)
我也有这个问题,发现我比较的对象有循环引用.(试过JSON.stringify()
把'TypeError:将循环结构转换为JSON').
当我编辑我的对象以使其没有圆形结构时,我修复了这个问题,并且不是通过引用而是通过属性值来比较对象,这是我需要的.
$ watch函数的第三个参数告诉我们如何比较观察对象.仅参考比较错误.真递归平等比较,如果一个对象包含循环引用,然后用最大堆栈大小.例如:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
66910 次 |
最近记录: |