2015-12-14 90 views
1

我有一个问题,显示一个预选值作为选择元素中的选定选项。这里有云代码angularjs ng选项空白选项,而不是预选

<select ng-model="data.company" ng-options="company as company.name for company in companies"></select> 


$scope.companies =[{ 
    id:1, 
    name:"Company 1" 
}, 
{ 
    id:2, 
    name:"Company 2" 
}]; 

$scope.data = { 
    company:{ 
     id:2, 
     name:"Company 2" 
    } 
} 

的问题是,当我在一节进入选择给了我一个空白选项为默认insted的向我展示“连队2”的。我即将做错了什么?

+1

尝试'$ scope.data = $ scope.companies [1];' – Antiga

+0

这问题已经在SO上已经被无数次的回答了。 – ragerory

回答

1

在这种情况下,您需要使用track by,因为您直接将对象值分配给ng-model。在这种情况下,发生的情况是,当您通过表达式直接绑定对象到data.company(ng模型)轨迹时,将检查中的company.id与每个companies元素ID。如果有人得到匹配,则预先选择该输入。

标记

<select ng-model="data.company" 
    ng-options="company as company.name for company in companies track by company.id"> 
</select> 

Demo Plunkr

+1

哇,这个工程,你能解释为什么没有跟踪它不工作? – lfelisiak

+0

@ user2600726查看我的编辑答案 –

+0

如果您将值设置为公司对象为$ scope.data = {company:$ scope.companies [1]},那么您实际上不需要使用track by;看到我的回答更新到 – Scott

0

试试这个

<select ng-model="data.company" ng-options="company.name for company in companies"></select> 

    $scope.data = { 
     company: $scope.companies[1]; 
    }; 

要在下拉列表中显示的值是公司名称和存储成为该公司的对象。

+0

仍然不能正常工作,我会照常做 ''我无法弄清楚这样(第一个)为什么不工作,因为对象被正确存储。 – lfelisiak

+0

是的,这也是工作,但te $ scope.data将被数据库检索,所以我不能覆盖该内容。我也很感谢你的回答。也感谢你:) – lfelisiak

0

你可以尝试使用NG-INIT

<select ng-init="data.company= companies[0]" 
     ng-model="data.company" 
     ng-options="company as company.name for company in companies"></select>