6

試圖找出爲什麼當綁定選定選項不再存在時,模型不會更新。我期望模型的屬性更新爲undefined/null /空字符串。篩選出選擇選項後,角度模型無法更新

情況:一個select使用過濾器驅動另一個select。選擇完成後,轉到原始select並選擇其他選項。過濾器將按預期移除第二個select選項,但第二個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-改變功能,第一,迫使它更新模型,但有一個更好的方法?

Plunker演示問題

回答

6

試試這個方法:

$scope.$watch('selectedCategory', function(selectedCategory){ 
    $scope.selectedSubCategory = null; 
}); 
+0

是的,這在技術上的工作,但增加了$手錶各綁選擇可能變得昂貴,不是嗎?有更好的/更清潔的方式嗎? – Andrew 2014-09-18 18:12:08

+0

安德魯,我認爲這是你的情況的正確解決方案。 1個選擇器 - 1個選擇 - 沒關係 – Alexei 2014-09-18 18:16:40

+0

@Andrew Dickerson您的其他選項與您在問題結束時列出的一樣 - 您可以簡單地強制selectedSubCategory的狀態爲無效。 @ ng-change =「selectedSubCategory =''」' – Matt 2014-09-18 18:17:54