バインドされた選択オプションが存在しなくなったときにモデルが更新されない理由を理解しようとしています。モデルのプロパティが未定義/null/空の文字列に更新されることを期待しています。
状況:フィルターを使用して別のselect
ドライバーを駆動します。select
選択が完了したら、元のオプションに移動してselect
別のオプションを選択します。フィルターはselect
予想どおり 2 番目のオプションを削除しますが、2 番目のモデル プロパティはselect
変更されません。
問題:モデルを渡そうとすると、不適切な値や以前の値が入力されます。さらに、Angular 検証を使用すると、select
必要になります...モデルにはプロパティの値 (以前の値) があるため、フォームは技術的に「有効」です。
HTML:
<select name="Category" ng-model="selectedCategory"
ng-options="item.name as item.name for item in categories">
<option value="">All Categories</option>
</select>
<select name="SubCategory" ng-model="selectedSubCategory"
ng-options="item.name as item.subCategory for item in categories | filter:selectedCategory">
<option value="">All SubCategories</option>
</select>
モデル:
app.controller('MainCtrl', function($scope) {
$scope.categories = [{
"id": "1",
"name": "Truck",
"subCategory": "Telescope"
}, {
"id": "2",
"name": "Truck",
"subCategory": "Hazmat"
}, {
"id": "3",
"name": "Van",
"subCategory": "Mini"
}];
});
ng-change 関数を最初に結び付けてモデルを強制的に更新できると確信していますが、より良い方法はありますか?
問題を示すプランカーの例