【问题标题】:Default value with ng-options after filter过滤后带有 ng-options 的默认值
【发布时间】:2015-11-05 19:23:54
【问题描述】:

我有一个 <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>

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    基本上,您要做的是根据其他一些模型值(过滤的vm.ums)更改一些模型值(vm.transaction.um)。有$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 对于这类任务来说并没有那么糟糕,但它只执行一次,它可能不适合动态过滤器或任何类型的延迟。

    【讨论】:

    • 这款手表将在哪里创建;在控制器中?
    • 您可以访问 $scope 的任何地方。控制器会做
    • 刚刚意识到,这行不通。 “|”过滤器语法纯粹是角度特征,而不是 javascript,在函数体中使用时会破坏代码。应该明确调用 measureForItem 过滤器(与 Angular 在幕后执行的操作相同,但手动完成)
    【解决方案2】:

    只需在控制器中设置vm.transaction.um(您分配给 ng-model 的成员):

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

    【讨论】:

      猜你喜欢
      • 2015-01-07
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2015-08-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      相关资源
      最近更新 更多