使用提供奇数渲染值的基本表达式的ngOptions

时间:2016-09-28 04:15:50

标签: angularjs ng-options angularjs-ng-options

我在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

2 个答案:

答案 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>