0

こんにちは、私はこのエラーが発生しています:

https://docs.angularjs.org/error/ $rootScope/infdig?p0=10&p1=%5B%5B%22fn:%20parentValueWatch;%20newVal:%201;%20oldVal:%20undefined%22,%22inputValue;%20newVal :%201;%20oldVal:%20undefined%22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%20undefined;%20oldVal:%201%22,%22inputValue;%20newVal:%20undefined;%20oldVal:%201 %22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%201;%20oldVal:%20undefined%22,%22inputValue;%20newVal:%201;%20oldVal:%20undefined%22%5D,%5B%22fn :%20parentValueWatch;%20newVal:%20undefined;%20oldVal:%201%22,%22inputValue;%20newVal:%20undefined;%20oldVal:%201%22%5D,%5B%22fn:%20parentValueWatch;%20newVal:%201 ;%20oldVal:%20undefined%22,%22inputValue;%20newVal:%201;%20oldVal:%20undefined%22%5D%5D

エラー: $rootScope:infdig 無限 $digest ループ

10 回の $digest() 反復に達しました。中止します!最後の 5 回の反復で発生したウォッチャー: [["fn: parentValueWatch; newVal: 1; oldVal: undefined","inputValue; newVal: 1; oldVal: undefined"],["fn: parentValueWatch; newVal: undefined; oldVal: 1 ","inputValue; newVal: 未定義; oldVal: 1"],["fn: parentValueWatch; newVal: 1; oldVal: 未定義","inputValue; newVal: 1; oldVal: 未定義"],["fn: parentValueWatch; newVal : 未定義; oldVal: 1","inputValue; newVal: 未定義; oldVal: 1"],["fn: parentValueWatch; newVal: 1; oldVal: 未定義","inputValue; newVal: 1; oldVal: 未定義"]]

どのウォッチャーでこの問題を認識しているのか、またはなぜ突然エラーがスローされるのかを認識するのに苦労しています。昨日までは正常に動作していました。

どんな助けでも大歓迎です。

4

1 に答える 1

4

説明 このエラーは、アプリケーションのモデルが不安定になり、各 $digest サイクルが状態の変化とそれに続く $digest サイクルをトリガーしたときに発生します。Angular はこの状況を検出し、無限ループによってブラウザーが応答しなくなるのを防ぎます。

たとえば、パスにウォッチを設定し、その後値が変更されたときに同じパスを更新すると、状況が発生する可能性があります。

$scope.$watch('foo', function() {
  $scope.foo = $scope.foo + 1;
});

よくある間違いの 1 つは、呼び出されるたびに新しい配列を生成する関数にバインドすることです。例えば:

<div ng-repeat="user in getUsers()">{{ user.name }}</div>

...

$scope.getUsers = function() {
  return [ { name: 'Hank' }, { name: 'Francisco' } ];
};

新しい配列を返すためgetUsers()、Angular は $digest サイクルごとにモデルが異なると判断し、エラーが発生します。解決策は、要素が変更されていない場合、同じ配列オブジェクトを返すことです。

var users = [ { name: 'Hank' }, { name: 'Francisco' } ];

$scope.getUsers = function() {
  return users;
};

$digest サイクルの許容反復の最大数は、TTL 設定によって制御されます。$rootScopeProvider.

詳細については、https://docs.angularjs.org/error/$rootScope/infdigをご覧ください。

于 2015-07-09T06:54:21.757 に答える