[解決済み] エラーです。10回の$digest()反復に達しました。動的なsortby述語で中断!?
質問
次のようなコードで、ユーザー名とスコアを繰り返し表示させています。
<div ng-controller="AngularCtrl" ng-app>
<div ng-repeat="user in users | orderBy:predicate:reverse | limitTo:10">
<div ng-init="user.score=user.id+1">
{{user.name}} and {{user.score}}
</div>
</div>
</div>
そして、それに対応するangularコントローラ。
function AngularCtrl($scope) {
$scope.predicate = 'score';
$scope.reverse = true;
$scope.users = [{id: 1, name: 'John'}, {id: 2, name: 'Ken'}, {id: 3, name: 'smith'}, {id: 4, name: 'kevin'}, {id: 5, name: 'bob'}, {id: 6, name: 'Dev'}, {id: 7, name: 'Joe'}, {id: 8, name: 'kevin'}, {id: 9, name: 'John'}, {id: 10, name: 'Ken'}, {id: 11, name: 'John'}, {id: 1, name: 'John'}, {id: 2, name: 'Ken'}, {id: 3, name: 'smith'}, {id: 4, name: 'kevin'}, {id: 5, name: 'bob'}, {id: 6, name: 'Dev'}, {id: 7, name: 'Joe'}, {id: 8, name: 'kevin'}, {id: 9, name: 'John'}, {id: 10, name: 'Ken'}]
}
上記のコードを実行すると Error: 10 $digest() iterations reached. 中止します! というエラーがコンソールに表示されました。
私は jsfiddle を使用します。
ソート述語はng-repeatの中だけで初期化され、オブジェクトの数に制限が適用されています。したがって、sortbyとlimitToの両方のウォッチャーを一緒に持つことがエラーの原因だと思います。
scope.reverseがfalse(スコアの昇順)であれば、エラーにはなりません。
何が間違っているのか、どなたか教えていただけませんか?ご協力をお願いします。
解決方法を教えてください。
こちらをご覧ください jsFiddle . (コードは基本的にあなたが投稿したものと同じですが、スクロールイベントをバインドするためにウィンドウの代わりに要素を使用しています)。
私が見る限りでは、投稿されたコードに問題はありません。あなたが言ったエラーは、通常、プロパティに対する変更のループを作成したときに発生します。たとえば、あるプロパティの変更を監視し、リスナーでそのプロパティの値を変更するような場合です。
$scope.$watch('users', function(value) {
$scope.users = [];
});
この場合、エラーメッセージが表示されます。
<ブロッククオート
Uncaught Error: 10 $digest() の反復処理に達しました。中止します!
ウォッチャー
直近の5回の反復処理で発生したもの: ...
あなたのコードにこのような状況がないことを確認してください。
を更新してください。
これはあなたの問題です。
<div ng-init="user.score=user.id+1">
レンダリング中にオブジェクトやモデルを変更してはいけません。そうしないと、新しいレンダリングが強制的に行われます(結果として ループ が発生し、その結果 'エラーです。10 $digest() イテレーションに達しました。中止します!' ).
モデルを更新したい場合は、コントローラかディレクティブで行い、決してビューでは行わないでください。
を使用しないことを推奨しています。
その
ng-init
このような事態を避けるために、正確に
テンプレートでngInitディレクティブを使用する(トイ/サンプルアプリのみ。 実際のアプリケーションには推奨しません)
以下は jsFiddle を、動作例とともにご紹介します。
関連
-
[解決済み】npm UNMET PEER DEPENDENCYの警告を修正するにはどうすればいいですか?
-
[解決済み】angularのonLoadとng-initの違いについて
-
[解決済み] AngularJSのディープリンクとは何ですか?
-
[解決済み] Apigee API へのリクエストで 401 レスポンスエラーが発生する
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
角型グローバル確認ボックス
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] ng-repeat :単一フィールドによるフィルタリング
-
[解決済み] AngularJSのサービスをコンソールからテストするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: window.initMap is not a function
-
[解決済み] `ui-router` $stateParams vs. $state.params
-
[解決済み] select 要素のデフォルト値を設定するための ng-option の使用方法
-
[解決済み] AngularJSのシンプルな "Hello, world "が動作しない。
-
[解決済み] ag-gridの行の追加/削除
-
[解決済み] どのようにangularJSでrouteProviderとlocationProviderを設定するのですか?
-
[解決済み] angularjsでチャートを作成する【終了】。
-
[解決済み] createspyとcreatespyobjの違いは何ですか?
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] ng-modelとng-bindの違いは何ですか?