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

HTML/viewに入れる{{father}}と、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 に答える