ng-options预定义选项对象

时间:2013-11-04 16:53:06

标签: angularjs ng-options

看看我的例子 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设置为默认选项对象,并在下拉列表中自动选择它。

2 个答案:

答案 0 :(得分: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();

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

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

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

答案 1 :(得分:0)

正如Davin Tryon已经提到的,使用track by是正确的方法,但是,我看到有些人使用track by和'作为'在相同的ng-options字符串中,这将不起作用。使用track by也应该满足使用'作为'

的需要