【问题标题】:ng-options predefined option Objectng-options 预定义选项对象
【发布时间】:2013-11-04 16:53:06
【问题描述】:

看看我的例子 http://plnkr.co/edit/21ewxVIaRm4IHyF3TgoD?p=preview

我需要将选项对象存储为 ng-model 所以我用于 ng-options ng-options="m as m.name for m in list"

但是,如果我手动将 ng-model 设置为对象,默认情况下它不会在下拉列表中选择正确的选项。它正确地存储了数据,但是如果使用这个表达式ng-options="m.name as m.name for m in list",它只会预先选择一个选项,但这会在模型上存储一个字符串而不是选项对象。

我是不是做错了什么?

目标:

  • 将 ng-model 设置为默认选项对象,并在下拉列表中自动选择它。

【问题讨论】:

    标签: angularjs ng-options


    【解决方案1】:

    Updated plunker.

    对于您使用的版本 (1.0.8),您必须使用循环解析对象:

    $scope.selected = {
        name:"Something"
      }
    
      $scope.setSelected = function() {
    
        angular.forEach($scope.list, function(item) {
    
          if (item.name == $scope.selected.name) {
    
            $scope.selected = item;
          }
        })
      }
    
      $scope.setSelected();
    

    更新的版本在ng-options 中支持track by 语法。所以你可以写:

    ng-options="m.name for m in list track by m.name"
    

    这将设置与谓词匹配的对象。

    【讨论】:

    • 太棒了,完美无瑕。谢谢!使用bower install angular#1.2.0-rc.3无缝升级。
    【解决方案2】:

    正如 Davin Tryon 已经提到的,使用 track by 是正确的做法,但是,我看到有些人在同一个 ng-options 字符串中使用 track by 和 'as',这是行不通的。使用track by也应该满足使用'as'的需要

    【讨论】:

      猜你喜欢
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      相关资源
      最近更新 更多