过滤后使用ng-options的默认值

时间:2015-11-05 19:23:54

标签: angularjs

我有一个<select>框,其中包含根据模型中另一个字段(另一个<select>字段)的值从过滤器驱动的选项。如果在过滤列表后,只显示一个选项,我想将其设为选中的选项。 ng-init似乎是一个起点,但Angular团队也建议不要使用它。

选择

 <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 个答案:

答案 0 :(得分: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对于此类任务并不是那么糟糕,但它只执行一次,并且它可能不适合动态过滤器或任何类型的延迟。

答案 1 :(得分:0)

只需在控制器中设置vm.transaction.um(您为ng-model指定的成员):

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