需要注意的一点是ngModel是ngOptions工作所必需的…注意ng-model="blah"的意思是"set $scope。废话到选定的值”。
试试这个:
<select ng-model="blah" ng-options="item.ID as item.Title for item in items"></select>
下面是AngularJS文档中的更多内容(如果你还没看过的话):
对于数组数据源:
数组中值的标签
为数组中的值选择标签
为数组中的值逐组标记
= select作为标签组的值在数组中
对于对象数据源:
对象中(键,值)的标签
选择对象中(键,值)的标签
为对象中的(键,值)按组标记
为对象中的(键,值)选择按组作为标签
对于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来设置模型(从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恰好被正确地初始化为“假的”,这可能会有点疯狂。在这种情况下,你很可能想在你的控制器中处理foo的初始化。
自定义默认选项:
这有点不同;在这里,你所需要做的就是添加一个option标签作为你的select的子标签,带有一个空的value属性,然后自定义它的内部文本:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="">Nothing selected</option>
</select>
注意:在这种情况下,即使您选择了不同的选项,“empty”选项也会保留在那里。在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>