最新的Web开发教程
 

AngularJS选择框


AngularJS,您可以创建基于数组或对象的项目下拉列表。


创建一个选择框使用NG选项

如果你想创建一个下拉列表,基于对象或AngularJS阵列上,你应该使用ng-option指令:

<div ng-app="myApp" ng-controller="myCtrl">

<select ng-model="selectedName" ng-options="x for x in names">
</select>

</div>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.names = ["Emil", "Tobias", "Linus"];
});
</script>
试一试»

NG选项VS NG-重复

您也可以使用ng-repeat指令做出同样的下拉列表:

<select>
<option ng-repeat="x in names">{{x}}</option>
</select>
试一试»

因为ng-repeat指令重复的用于在阵列的每个项目的HTML代码的块,它可以用于创建在下拉列表中的选项,但ng-options指令是特别为填充选项的下拉列表制成,并具有的至少一个重要的优点:

用由下拉菜单ng-options允许选定的值是一个对象 ,而制成的下拉列表ng-repeat必须是一个字符串。

我应该使用什么?

假设你有对象的数组:

$scope.cars = [
    {model : "Ford Mustang", color : "red"},
    {model : "Fiat 500", color : "white"},
    {model : "Volvo XC90", color : "black"}
];

ng-repeat指令有它的局限性,所选择的值必须是一个字符串:

采用ng-repeat

<select ng-model="selectedCar">
<option ng-repeat="x in cars" value="{{x.model}}">{{x.model}}</option>
</select>

<h1>You selected: {{selectedCar}}</h1>
试一试»

当使用ng-options指令,选择的值可以是一个对象:

使用ng-options

<select ng-model="selectedCar" ng-options="x.model for x in cars">
</select>

<h1>You selected: {{selectedCar.model}}</h1>
<p>It's color is: {{selectedCar.color}}</p>
试一试»

当选择的值可以是一个对象,它可以存储更多的信息,您的应用程序可以更加灵活。

我们将使用ng-options指令在本教程中。


数据源作为一个对象

在前面的例子中的数据源是一个数组,但是我们也可以使用一个对象。

假设你有键值对的对象:

$scope.cars = {
    car01 : "Ford",
    car02 : "Fiat",
    car03 : "Volvo"
};

在表达ng-options属性是对象有点不同:

使用对象作为数据源, x表示键, y表示的值:

<select ng-model="selectedCar" ng-options=" x for (x, y) in cars ">
</select>

<h1>You selected: {{selectedCar}}</h1>
试一试»

所选的值将永远是在键盘对的

在一个键盘对中的也可以是一个对象:

所选的值将仍然是一个键盘对的价值 ,只是这一次它是一个对象:

$scope.cars = {
car01 : {brand : "Ford", model : "Mustang", color : "red"},
car02 : {brand : "Fiat", model : "500", color : "white"},
car03 : {brand : "Volvo", model : "XC90", color : "black"}
};
试一试»

在下拉列表中的选项没有在一个关键的-值对的密钥 ,也可以是数值,或值对象的属性:

<select ng-model="selectedCar" ng-options=" y.brand for (x, y) in cars">
</select>
试一试»