我在Object
中有以下TypeScript
使用<select>
为ng-options
定义了一些选项:
$scope.sOptions = [
{
name: "Female"
},
{
name: "Male"
}];
我为ng-options
AngularJS
提供了以下内容:
ng-options="opt.name for opt in sOptions"
这实际上有效,除了根据ng-option
的文档,value
在构建<option>
元素时应该只是循环计数器。但是我看到以下渲染:
<option value="?" selected="selected"></option>
<option label="Female" value="object:6">Female</option>
<option label="Male" value="object:7">Male</option>
我期待看到的内容如下:
<option value="0" selected="selected"></option>
<option label="Female" value="1">Female</option>
<option label="Male" value="2">Male</option>
我错误地为value
元素的<option>
生成了那些奇怪的值?
编辑:在阅读了所提供的正确答案后,此其他帖子详细介绍了类似问题以及如何使用track by
来满足此要求:https://stackoverflow.com/a/30292209/410937
答案 0 :(得分:1)
要实现此要求,您必须在track by
中使用ng-select
。 track by将帮助您将select选项与值标记绑定。您还应提供唯一ID字段以跟踪选择选项。
<select ng-model="selectedName" ng-options="item.Name for item in names track by item.Id">
</select>
在你的控制器中,名字对象将是这样的
$scope.names = [{Name: "Name1", Id: 0}, {Name: "Name2", Id: 1}, {Name: "Name3", Id: 2}];
为了初始化选择选项,您可以通过
设置模型$scope.selectedName = $scope.names[0];
只有在select选项
中使用track by属性时,才能初始化范围变量答案 1 :(得分:0)
这是因为您未在select属性中使用ng-model
。 Angular这样做是为了防止意外选择模型。你需要绑定你的选择和&#34;空&#34;选项将消失。
<select ng-options="opt.name for opt in sOptions"
ng-model="someScopeVar">
</select>