6

バインドされた選択オプションが存在しなくなったときにモデルが更新されない理由を理解しようとしています。モデルのプロパティが未定義/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 関数を最初に結び付けてモデルを強制的に更新できると確信していますが、より良い方法はありますか?

問題を示すプランカーの例

4

1 に答える 1

6

この方法を試してください:

$scope.$watch('selectedCategory', function(selectedCategory){
    $scope.selectedSubCategory = null;
});
于 2014-09-18T18:08:45.757 に答える