http://jsfiddle.net/2NJ7y/3/(AngularJS 1.0.1のバージョン)の例を見てください。幸運な番号の入力を待っている単純なアプリがあります。数字が7に等しい場合、私はラッキーナンバーをヌルにリセットします。数字7を何度か入力すると、入力フィールドに偶然/ランダムに幸運な数字が残ります。どうして?この動作はどのように解決されますか?ありがとう。
答えて
あなたは、単に
$scope.luckynumber = undefined;
前にアラートに置く場合は、競合状態を解消しませんが、7が適切にクリアされないように、あなたはそれを変更できますが、時にはあなたは、二度の警告を取得します。
エラーを表示するようにアラートコードを冪等のものに置き換えた場合、この問題は重要ではありません。
私はいくつかのデバッグを行いました。
私にとっては、まずラッキーナンバーは入力欄に無作為にとどまりません。
enter 3 (model==3, input==3)
=>enter 7 (alert, model==null, input="")
=>enter 3 (model==3, input==3)
=>remove 3 (model=="", input=="")
=>前のモデル値がNULLであった場合にのみ、入力フィールドに=>enter 7 (alert, model==null, input="7")
7滞在enter 7 (alert, model==null, input="")
。
を何が起こる:あなたは入力7がinput directiveのlistener functionによって処理された入力イベントを発射したとき。リスナー関数呼び出しは$setViewValueです。 $ setViewValueは$ viewValue、$ modelValue、モデル値を設定し、$ viewChangeListeners(ngChangeDirective simply adds handler〜$ viewChangeListeners)を呼び出します。アラートが表示され、luckynumberがnullに設定されます。結局のところluckynumberが以前のダーティチェックで以前の値と異なる場合$watch handlerと$renderが呼び出されます。
私の例では、以前のモデル値が "3"または ""だった場合に$ renderが呼び出されました。以前のモデル値がnullの場合、$ renderは呼び出されません。 0遅延で$タイムアウトがの作品はなぜ
:あなたはevents queueの終わりに延期されてnullにluckynumberを変えて0遅延機能付き$タイムアウトを呼び出すとき(ブラウザですべてのJavaScriptは単一のスレッド上で実行されます)。 $ viewChangeListenerは、7からnullへのモデル値を変更しません。 $ digestが終了します。 $ timeoutハンドラが呼び出されます。モデル値はnullに設定されています。 $ watchハンドラと$ renderが呼び出されます。 $ renderは入力値を ""に設定します。
- 1. AngularJSトリガの変更が動作しない
- 2. AngularJSバージョンのSmartAdminテンプレートでスパークラインが動作しない
- 3. knockoutjsテンプレートでAngularjsコンポーネントが動作しない
- 4. glibcの変更が動作しない
- 5. ネームサーバーの変更が動作しない
- 6. すべてのコントローラをリセットしないでAngularJsの場所のパスを変更
- 7. anglejsテンプレート変数がサーバー上で動作していない
- 8. CoqIDEでリセットが動作しない
- 9. fadeInがリセット後に動作しない
- 10. Capistrano db:リセットが動作しない
- 11. すべてをリセットしてもテンプレートが更新されない
- 12. 単純なAngularJSが動作しない
- 13. AngularJSのNG-MINLENGTHが動作しない
- 14. WordPressテンプレートの変更方法。 CSSの直接編集が動作しない
- 15. AngularJS入力変更リセット
- 16. AngularJSコントローラが最初の更新後に動作しないページ
- 17. ランダム処理が動作しない
- 18. Chart.jsランダムRGBバックグラウンドカラージェネレータが動作しない
- 19. Javascriptのランダムな色の「ボール」が正しく動作しない
- 20. ag-Gridは、動作していない列にテンプレートを作成します。AngularJS
- 21. サイズ変更UIViewが動作しない
- 22. PhoneGap変更アイコンが動作しない
- 23. AngularJSが動作していないカルマ
- 24. angularJSの自動更新可能な値
- 25. onchange入力値トリガ選択オプション変更が動作しない
- 26. AngularJS:ディレクティブのtemplateUrlの異常な動作(テンプレートは正常に動作します)
- 27. デフォルトのCSS値をリセットした後にフォントサイズが変更されない?
- 28. AngularJs - $ http.getが動作しない
- 29. indexOfがAngularJSフィルタで動作しない
- 30. ngRouteがAngularJSで動作しない
これは良い質問です。あなたはここで一種の競合状態に陥っているため、それが適切に解決されていません。これを解決する適切な方法を見つけることに興味がありますか? – ganaraj
[$ timeout service](http://docs.angularjs.org/api/ng.$timeout)の使用はどうですか? http://jsfiddle.net/2NJ7y/10/ しかし、なぜそれが0遅延で動作するのかわかりません。 –
@Artem:それほど素晴らしい回避策ではありませんが、機能します。しかし、私はまだ究極の解決を待っています。 :-)ありがとう。 – user1595465