为什么AngularJS在Select中包含空选项?

Why does AngularJS include an empty option in select?

我已经和AngularJS一起工作了几个星期,有一件事让我很困扰,那就是即使在尝试了http://docs.angularJS.org/api/ng.directive:select中定义的所有排列或配置之后,作为select元素的第一个子元素,我仍然会得到一个空选项。

这是玉:

1
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');

这里是控制器:

1
2
3
4
5
$scope.typeOptions = [
    { name: 'Feature', value: 'feature' },
    { name: 'Bug', value: 'bug' },
    { name: 'Enhancement', value: 'enhancement' }
];

最后,下面是生成的HTML:

1
2
3
4
5
6
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
    <option value="?" selected="selected"></option>
    <option value="0">Feature</option>
    <option value="1">Bug</option>
    <option value="2">Enhancement</option>
</select>

我需要做什么来摆脱它?

附言:没有这个功能也能正常工作,但是如果使用select2而不使用多个选项,看起来就很奇怪了。


当传递给ng-options的一组选项中不存在ng-model引用的值时,生成空的option。这样做是为了防止意外的模型选择:AngularJS可以看到初始模型未定义或不在选项集中,并且不想自己决定模型值。

如果要去掉空选项,只需在控制器中选择一个初始值,如下所示:

1
$scope.form.type = $scope.typeOptions[0].value;

以下是jfiddle:http://jsfidle.net/mtfrd/3/

简而言之:空选项意味着没有选择有效的模型(有效的我的意思是:从选项集)。您需要选择一个有效的模型值来消除这个空选项。