0

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

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

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

我做错了什么吗?

目标:

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

2 回答 2

1

更新了 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 byng-options. 所以你可以写:

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

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

于 2013-11-04T17:45:53.097 回答
0

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

于 2014-03-31T16:32:04.240 回答