怎么做ng-options和ng-repeat不同?
在下面的代码中,我有一个ng-repeat迭代人员列表:
<select ng-model="selectedPerson" >
<option ng-repeat="obj in people" value="{{obj.id}}">{{obj.name}}</option>
</select>
Run Code Online (Sandbox Code Playgroud)
以下是我认为使用中的等效选择框ng-options:
<select ng-model="selectedPerson" ng-options='obj.name for obj in people'></select>
Run Code Online (Sandbox Code Playgroud)
我希望他们表现得一样,但事实并非如此.为什么?
$scope.people = [
{
id: 0,
name: 'Leon',
music: [
'Rock',
'Metal',
'Dubstep',
'Electro'
]
},
Run Code Online (Sandbox Code Playgroud)
Kru*_*rut 26
ng-repeat为每次迭代创建一个新的范围,因此不会像ng-options一样执行.
对于小型列表,无关紧要,但较大的列表应使用ng-options.除此之外,它在指定迭代器方面提供了很大的灵活性,并提供了超过ng-repeat的性能优势.
Ton*_*ada 10
从文档:
注意:当您希望将选择模型绑定到非字符串值时,ngOptions为元素提供了一个迭代器工具,应该使用该工具代替ngRepeat.这是因为选项元素目前只能绑定到字符串值.
这个小提琴使得更清楚:select2将绑定到选择1而不是相反.点击按钮,原因将显示自己:-)
HTML
<div ng-app ng-controller="MyCtrl">
<select ng-model="selectedPerson" >
<option ng-repeat="obj in people" value="{{obj.id}}">
{{obj.name}}
</option>
</select>
<select ng-model="selectedPerson"
ng-options="p.id as p.name for p in people">
</select>
selected: {{selectedPerson}} {{typeofSelectedPerson()}}
<button ng-click="selectedPerson=2">Jao</button>
<button ng-click="selectedPerson='1'">Ze</button>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
function MyCtrl($scope){
$scope.selectedPerson = 1;
$scope.people = [
{
id: 1,
name: 'Ze'
},
{
id: 2,
name: 'Jao'
}
];
$scope.typeofSelectedPerson = function(){
return typeof $scope.selectedPerson;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21729 次 |
| 最近记录: |