2013-01-16 42 views
0

在一些複雜場景中,可能會因爲拋出堆棧溢出而忽略屬性更改。如何忽略範圍內的屬性更改?

檢查:

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

這將創建和無限遞歸導致堆棧溢出angularjs試圖去了所有屬性的髒檢查。

是否有一個前綴或什麼東西,可以讓我強迫angularjs忽略觀看該屬性?

+0

如果您嘗試在對象上使用'JSON.stringify',則會發生同樣的情況。 – andlrc

+0

聽起來像是該死的循環引用給我 – kidwon

回答

0

除非你正在設置$watch的objectEquality參數true,$手錶不應該做‘淺’髒檢查(即,比較每個對象的屬性)–它應該只檢查是否對象現在引用一些其他對象。

這裏的a fiddle表看到father,但在name屬性發生變化時沒有注意到(單擊超鏈接更改名稱)。

如果我把{{father}}到HTML /視圖,鉻注意到圓形結構,而不是堆棧溢:

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) 

只是好奇,你在做什麼,看看堆棧溢出(什麼瀏覽器)?