注:サポートに関する質問については、 https : ください。
機能をリクエストしバグを報告しますか?
バグ
現在の動作は何ですか?
Angular 1.6は、 <option>
のリストが変更されると、 <select>
s ng-model
値をリセットします(「その他の情報」セクションを参照)。
Angular1.5はそれを保持します。
現在の動作がバグである場合は、再現する手順を提供し、可能であればhttps://plnkr.coまたは同様の方法で問題の最小限のデモを提供して
Angular 1.6: https :
Angular 1.5.11: https ://plnkr.co/edit/e0LVMEtGP2j4JxNf8lsp?p = preview
期待される動作は何ですか?
ng-model
はその価値を保持します。
行動を変える動機/ユースケースは何ですか?
正しくありません。
この問題の影響を受けるAngularのバージョンとブラウザ/ OSはどれですか? また、最新の安定版とスナップショット(https://code.angularjs.org/snapshot/)バージョンでテストしてください。
Angular1.6.xが影響を受けます。
Angular1.5.xはそうではありません。
その他の情報(例:スタックトレース、関連する問題、修正方法の提案)
重要なのは、Angular 1.6は、 options
の値ではなく、モデルによってオプションを追跡することです。
上記のスニペットでは、options配列に2つのオブジェクトが含まれています: [{val: "1"}, {val: "2"}]
。
ng-repeat
はそれらを繰り返し処理し、オプション値とタイトルの両方としてval
プロパティを使用します。
vm.selected
はselectのng-model
値として使用され、最初は「2」に設定されています。
押した後Change options
ボタンを私はこの1つにオプションの配列を置き換える: [{val: "2"}, {val: "3"}]
と角1.6リセットvm.selected
値ではなく、オプションの値を持つので2
ありますまだリストにあります。
この場合、Angular 1.5は正しく動作し、 vm.selected
値が保持されます。
vm.options
にプリミティブ値が含まれている場合、バグは表示されません(スニペット)。
有効な問題のようで、1.6.0-rc.0で壊れます。 以前に発生しなかった理由はわかりませんが、問題は次のようです。
ngRepeat
は前の<option>
要素を削除します。<select>
が選択解除され、 ngModel
がnullに設定されます。ngRepeat
によって作成および挿入されますが、modelValueは2
はなくなったため、 <select>
は新しい<option value="2" ...>
に関連付ける方法がありません。 回避策は、 track by
を使用して、 <option>
要素の破棄と再作成を回避することです。
<option ng-repeat="option in options track by option.val" value="option.val">...
簡単に見ると、次のコミットがこれを引き起こした候補です(ただし、他の何かである可能性があります)。
頭のてっぺんから、この行をscheduleRender()
置き換えることから始めて、それが役立つかどうかを確認します...
@Narretzにはもっと良い洞察があると確信しています:smiley:
回避策は、トラックバイを使用して、
はい、それも見つけましたが、言及するのを忘れました😏
これはhttps://github.com/angular/angular.js/commit/47c15fbcc10f118170813021e8e605ffd263ad84の意図的な変更であるようです: "-現在選択されているオプションが削除されるか、その値が変更されると、モデルはnullに設定されます。 「」 しかし、これはこれが壊れている可能性があること、またはngRepeatがオプションを更新するためにダイジェストを取得することを考慮していませんでした。 要素の作成/破棄を制御するため、ngOptionsでも簡単に実行できます。
しかし、scheduleRender()は機能します、 @ gkalpakに賛成です! テストに失敗するかどうかを確認し、PRを準備します。
最も参考になるコメント
これはhttps://github.com/angular/angular.js/commit/47c15fbcc10f118170813021e8e605ffd263ad84の意図的な変更であるようです: "-現在選択されているオプションが削除されるか、その値が変更されると、モデルはnullに設定されます。 「」 しかし、これはこれが壊れている可能性があること、またはngRepeatがオプションを更新するためにダイジェストを取得することを考慮していませんでした。 要素の作成/破棄を制御するため、ngOptionsでも簡単に実行できます。
しかし、scheduleRender()は機能します、 @ gkalpakに賛成です! テストに失敗するかどうかを確認し、PRを準備します。