0

在一些复杂的场景中,人们可能希望忽略属性更改,因为它可能引发堆栈溢出。

检查这个:

$scope.father = {
    name: "John",
    children: []
};
var child = {
    name: "Mary",
    father: $scope.father
};
$scope.father.children.push(child);

这会创建无限递归,导致堆栈溢出,因为 angularjs 试图遍历所有属性以进行脏检查。

是否有前缀或其他东西可以让我强制 angularjs 忽略观看该属性?

4

1 回答 1

0

除非您将$watch的 objectEquality 参数设置为true,否则 $watch 不应该进行“浅层”脏检查(即比较每个对象属性)——它应该只检查对象现在是否正在引用其他对象。

这是一个在更改 name 属性时会注意但不会注意到的小提琴(单击超链接以更改名称)father

如果我放入{{father}}HTML/视图,Chrome 会注意到循环结构,而不是堆栈溢出:

TypeError: Converting circular structure to JSON
  at Object.stringify (native)
  at toJson (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.js:721:15)

只是好奇,你在做什么来查看堆栈溢出(以及什么浏览器)?

于 2013-01-16T15:39:59.767 回答