需要注意的一件事是 ngModel 是ngOptions 工作所必需的......注意ng-model="blah"
它说“将 $scope.blah 设置为选定的值”。
试试这个:
<select ng-model="blah" ng-options="item.ID as item.Title for item in items"></select>
这里有更多来自 AngularJS 的文档(如果你还没有看过):
对于数组数据源:
- 数组中值的标签
- 选择作为数组中值的标签
- 标签 group by group for value in array = 选择作为标签 group by group for value in array
对于对象数据源:
- 对象中(键,值)的标签
- 选择作为对象中 (key , value) 的标签
- 对象中的(键,值)的标签分组
- 为对象中的(键,值)按组选择作为标签
关于 AngularJS 中选项标签值的一些说明:
当您使用 时ng-options
,由 ng-options 写出的选项标签的值将始终是选项标签相关的数组项的索引。这是因为 AngularJS 实际上允许您使用选择控件选择整个对象,而不仅仅是原始类型。例如:
app.controller('MainCtrl', function($scope) {
$scope.items = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'blah' }
];
});
<div ng-controller="MainCtrl">
<select ng-model="selectedItem" ng-options="item as item.name for item in items"></select>
<pre>{{selectedItem | json}}</pre>
</div>
以上将允许您直接选择整个对象$scope.selectedItem
。关键是,使用 AngularJS,您无需担心选项标签中的内容。让 AngularJS 来处理;您应该只关心您的范围内模型中的内容。
这是一个演示上述行为的plunker,并显示写出的HTML
处理默认选项:
上面有几件事我没有提到与默认选项有关。
选择第一个选项并删除空选项:
您可以通过添加一个简单的方法ng-init
将模型 (from ng-model
) 设置为您重复的项目中的第一个元素ng-options
:
<select ng-init="foo = foo || items[0]" ng-model="foo" ng-options="item as item.name for item in items"></select>
注意:如果foo
碰巧正确初始化为“falsy”,这可能会变得有点疯狂。在这种情况下,您foo
很可能希望在控制器中处理 的初始化。
自定义默认选项:
这有点不同;在这里,您需要做的就是添加一个选项标签作为您选择的子项,使用空值属性,然后自定义其内部文本:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="">Nothing selected</option>
</select>
注意:在这种情况下,即使您选择了不同的选项,“空”选项也会保留在那里。这不是 AngularJS 下选择的默认行为的情况。
进行选择后隐藏的自定义默认选项:
如果您希望在选择一个值后您的自定义默认选项消失,您可以将 ng-hide 属性添加到您的默认选项:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="" ng-if="foo">Select something to remove me.</option>
</select>