jsFiddle:http://jsfiddle.net/shandylion/2r3z1uma/
我需要显示一个对象列表作为下拉列表,其中更改下拉列表会更改列表中的相应元素。理想情况下,每个下拉列表都应该默认为该元素。
因此,请使用以下数据:
$scope.allPeople = [{"name":"Ann", "Age":10},
{"name":"Barb", "Age":20},
{"name":"Carl", "Age":30}];
$scope.selectedPeople = [{"name":"Ann", "Age":10},
{"name":"Carl", "Age":30}];
以及以下HTML:
<div ng-repeat="selectedPerson in selectedPeople">
<select ng-options="person as person.name for person in allPeople"
ng-model="selectedPeople[$index]"
name="select-{{$index}}" id="select-{{$index}}"></select>
</div>
应该有两个下拉列表,第一个默认为&#34; Ann&#34;第二个是&#34; Carl&#34;。
我已尝试使用ng-selected
,但这似乎只适用于<option>
代码,而不是<select>
内部。其他Stack Overflow帖子建议我们应始终使用ng-options
而不是<option>
使用ng-repeat
,因此我不知道如何将其默认为适当的值。
答案 0 :(得分:1)
这里是sample plunker,它有一个可行的解决方案以及下面描述的错误。
下拉列表的缺陷是,当您想要从选项列表中预选值时,所选模型应该是指向绑定列表中同一对象的引用。说你有:
var list = [{ id: 1, value: 'first'}];
var model = { id: 1, value: 'first' };
<select ng-options="item.value for item in list" ng-model="model"></select>
这将不预先选择下拉列表,因为list[0]
和model
不是同一个对象,尽管它们看起来很相似。如果您将ng-model
设置为list[0]
,则应该预先选择它。
答案 1 :(得分:0)
由于您使用的是person.name for person in allPeople
,因此所选选项会将person.name
作为值返回。您将$scope.selectedPeople
数组的值预设为对象,这与您的选择列表将返回的值不匹配,因此您的初始值未正确设置。
如果您希望将person.name
作为每个选项的值,则应将$scope.selectedPeople
更改为:
$scope.selectedPeople = ["Ann", "Carl"];
另一方面,如果您想要返回person
作为每个选项的值,请将ng-options表达式更改为person as person.name for person in allPeople
,这意味着您返回person
并将其显示为person.name
中每个person
的{{1}}。