2015-11-05 85 views
1

我有一個<select>框,其中包含基於模型中另一個字段(另一個<select>字段)的過濾器驅動的選項。如果在過濾列表之後,只有一個選項可以顯示,我想使其成爲選定的選項。 ng-init看起來像一個起點,但它也被Angular團隊推薦爲不使用的東西。默認值與篩選後的ng-options

SELECT

<select 
    tabindex="5" 
    class="form-control" 
    ng-model="vm.transaction.um" 
    ng-options="um.name for um in vm.ums | measuresForItem:vm.transaction.item"> 
</select> 

回答

2

基本上你想要做的是改變一些模型值(vm.transaction.um)基於某個其他模型值(已過濾vm.ums)。有$watch()函數完成這件事情。嘗試

$scope.$watch('(vm.ums | measuresForItem:vm.transaction.item).length', function(newVal) { 
    if (newVal == 1) 
     $scope.vm.transaction.um = (<get filtered result here>)[0].name; 
}); 

其實ng-init不是這樣排序的任務是壞,但它只能執行一次,它可能是不適合進行動態過濾器或任何種類的推遲。

+0

這款手錶將於何處創建;在控制器中? –

+0

您可以訪問$範圍的任何地方。控制器會做 –

+0

剛剛意識到,它不會工作。 「|」過濾器語法是純粹的角度特徵,而不是JavaScript,它將在函數體中使用時破壞代碼。應該顯式調用measuresForItem過濾器(角度在場景後面執行的操作,但是手動完成) –

0

剛剛成立vm.transaction.um在你的控制器(你分配到NG-模型中的成員):

if(this.vm.ums.length === 1) { 
    this.vm.transaction.um = this.vm.ums[0]; 
}