AngularJS 选择框 (select)
AngularJS 可以使用数组或对象创建一个下拉列表选项
使用 ng-options 创建选择框
AngularJS ng-option 指令用来创建一个下拉列表
列表项通过对象和数组循环输出
ng-init 指令可以用来设置默认选中值
<!DOCTYPE html> <meta charset="utf-8"> <link href="/static/next/css/tryit.css?v=2017082407" rel="stylesheet"/> <script src="https://cdn.staticfile.org/angular.js/1.6.3/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <select ng-init="selectedName = names[0]" ng-model="selectedName" ng-options="x for x in names"></select> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.names = ["阿里", "腾讯", "简单教程"]; }); </script>
ng-options 与 ng-repeat
ng-repeat 指令也可以用来创建下拉列表
<!DOCTYPE html> <meta charset="utf-8"> <link href="/static/next/css/tryit.css?v=2017082407" rel="stylesheet"/> <script src="https://cdn.staticfile.org/angular.js/1.6.3/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <select><option ng-repeat="x in names">{{x}}</option></select> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.names = ["阿里", "腾讯", "简单教程"]; }); </script>
ng-repeat 指令是通过数组来循环 HTML 代码来创建下拉列表
ng-options 指令更适合创建下拉列表,它有以下优势
- 使用 ng-options 的选项是一个对象
- ng-repeat 是一个字符串
用哪个更好?
假设我们有一个对象
$scope.sites = [ {site : "腾讯", url : "http://www.qq.com"}, {site : "阿里", url : "http://www.taobal.com"}, {site : "简单教程", url : "https://www.twle.cn"} ];
ng-repeat 有局限性,因为它选择的值是一个字符串
<!DOCTYPE html> <meta charset="utf-8"> <link href="/static/next/css/tryit.css?v=2017082407" rel="stylesheet"/> <script src="https://cdn.staticfile.org/angular.js/1.6.3/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <select ng-model="selectedSite"><option ng-repeat="x in sites" value="{{x.url}}">{{x.site}}</option> </select><h1>你选择的是: {{selectedSite}}</h1> <p>该范例演示了使用 ng-repeat 指令来创建下拉列表,选中的值是一个字符串</p> </div> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sites = [ {site : "腾讯", url : "http://www.qq.com"}, {site : "阿里", url : "http://www.taobal.com"}, {site : "简单教程", url : "https://www.twle.cn"} ]; }); </script>
使用 ng-options 指令,选择的值是一个对象
<!DOCTYPE html> <meta charset="utf-8"> <link href="/static/next/css/tryit.css?v=2017082407" rel="stylesheet"/> <script src="https://cdn.staticfile.org/angular.js/1.6.3/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <select ng-model="selectedSite" ng-options="x.site for x in sites"></select> <h1>你选择的是: {{selectedSite.site}}</h1> <h3>网址为: {{selectedSite.url}}</h3> </div> <p>该范例演示了使用 ng-options 指令来创建下拉列表,选中的值是一个对象</p> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sites = [ {site : "腾讯", url : "http://www.qq.com"}, {site : "阿里", url : "http://www.taobal.com"}, {site : "简单教程", url : "https://www.twle.cn"} ]; }); </script>
当选择值是一个对象时,我们就可以获取更多信息,应用也更灵活
数据源为对象
上面的范例,我们都是使用数组作为数据源,接下来我们使用将数据对象作为数据源
$scope.sites = { site01 : "腾讯", site02 : "阿里", site03 : "简单教程" };
ng-options 使用对象有很大的不同
下面的范例使用对象作为数据源, x 为键 (key), y 为值 (value)
<!DOCTYPE html> <meta charset="utf-8"> <link href="/static/next/css/tryit.css?v=2017082407" rel="stylesheet"/> <script src="https://cdn.staticfile.org/angular.js/1.6.3/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <select ng-model="selectedSite" ng-options="x for (x, y) in sites"></select> <h1>你选择的值是: {{selectedSite }}</h1> </div> <p></p> <footer>简单教程,简单编程<br/>Copyright © 简单教程 www.twle.cn</footer> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sites = { site01 : "腾讯", site02 : "阿里", site03 : "简单教程" }; }); </script>
我们可以看到 你选择的值为在 key - value 对中的 value
嵌套对象
value 在 key - value 对中也可以是个对象
选择的值在 key- value 对的 value 中, 这是它是一个对象
$scope.cars = { car01 : {brand : "Ford", model : "Mustang", color : "red"}, car02 : {brand : "Fiat", model : "500", color : "white"}, car03 : {brand : "Volvo", model : "XC90", color : "black"} };
在下拉菜单也可以不使用 key - value 对中的 key , 直接使用对象的属性
<select ng-model="selectedCar" ng-options=" **y.brand** for (x, y) in cars"></select>