2013-11-04 39 views
0

看一看我的例子 http://plnkr.co/edit/21ewxVIaRm4IHyF3TgoD?p=previewNG-选择预定义的选项对象

我需要选择对象存储为NG-模型,所以我使用NG选项ng-options="m as m.name for m in list"

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

我做错了什么吗?

目标:

  • 组NG-模型到默认选项对象,并将它在下拉被自动选择。

回答

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" 

而这会设​​置匹配谓词的对象。

+0

真棒,完美无瑕地工作。谢谢! 使用'bower install angular#1.2.0-rc.3'无缝升级。 – jqualls

0

正如Davin Tryon已经提到的那样,使用track by是正确的方式,但是,我发现有些人在同一个ng选项字符串中使用track和as,这是行不通的。使用轨道也应该迎合使用'as'的需要