ng-select ng-options ng-repeat的用法与区别
工作中总会遇到关于下拉选项的一些操作,但是经常会遇到一些问题,基本上都是以下问题:
- 下拉框使用ng-options和ng-repeat的区别
- 下拉框的默认选项的问题
- 下拉框的model值如何绑定
- 下拉框的禁用选项问题
- 下拉框的分组和排序的问题
ng-repeat和ng-options的用法
ng-repeat是通过数组来循环HTML代码来创建下拉列表,ng-repeat绑定到ngModel的值只能是字符串。
ng-options的列表项可以是对象和数组循环输出,很多时候使用ng-options更方便。
(1)看一个数据的列表项是数组的例子:
- <script>
- var app = angular.module('myApp', []);
- app.controller('myCtrl', function($scope) {
- $scope.names = ["Google", "Runoob", "Taobao"];
- });
- </script>
a. 使用ng-options循环数据:
- <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>
注意,这里的ng-init可以直接将下拉列表的第一个值设置为默认值。
b. 使用ng-repeat循环数据:
- <div ng-app="myApp" ng-controller="myCtrl">
- <select>
- <option ng-repeat="x in names">{{x}}</option>
- </select>
- </div>
(2)数据的列表项是对象
- $scope.sites = [
- {site : "Google", url : "http://www.google.com"},
- {site : "Runoob", url : "http://www.runoob.com"},
- {site : "Taobao", url : "http://www.taobao.com"}
- ];
- $scope.selectedSite=$scope.sites[0]; //这一句直接将下拉列表的第一个值作为默认值
a. 使用ng-repeat就会有局限性,选择的值只能是一个字符串:
- <select ng-model="selectedSite">
- <option ng-repeat="x in sites" value="{{x.url}}">{{x.site}}</option>
- </select>
- <h1>你选择的是: {{selectedSite}}</h1>
b. 使用ng-options选择的值就是一个对象:
- <select ng-model="selectedSite" ng-options="x.site for x in sites">
- </select>
- <h1>你选择的是: {{selectedSite.site}}</h1>
- <p>网址为: {{selectedSite.url}}</p>
从上面两个例子,可以看出ng-options和ng-repeat的区别有以下几个方面:
1. ng-options一定要和ng-model搭配,这里的ng-model获取的就是列表的一个对象。
ng-repeat的value值类型是string。
2. 设置首选项有两个方法,ng-init和直接js赋值,也可以添加一个未选中的选项:
- <select ng-model="selectedSite" ng-options="x.site for x in sites">
- <option value="">-- 选择一个地址 --</option>
- </select>
关于ng-repeat的其他用法
在实际的应用场景中,我们需要一个表格来管理信息,这时候使用ng-repeat的$index可以知道是哪一行被操作了。具体看一个例子:
- <table>
- <tr ng-repeat="x in list">
- <td>{{x.name}}</td>
- <td><input type="button" value="我是第{{$index}}行的按钮"
- ng-click="onClick($index)"></td>
- </tr>
- </table>
- $scope.onClick = function (index) {
- alert("点击了第"+index+"行的按钮");
- };
要注意的是,$index是从0开始计算的。
ng-options的分组和排序的功能
(1) ng-options支持group by语法进行分组。
- $scope.colors = [
- {name: '黑色', color: 'black', type: "暗色"},
- {name: '白色', color: 'white', type: "亮色"},
- {name: '红色', color: 'red', type: "暗色"},
- {name: '蓝色', color: 'blue', type: "暗色"},
- {name: '黄色', color: 'yellow', type: "亮色"}
- ];
- <select ng-model="colorChosen" ng-options="color.name group by color.type for color in colors">
结果会根据“暗色”和“亮色”分组。
(2)ng-options支持orderBy过滤器对结果排序
- <select ng-model="colorChosen" ng-options="color.name group by color.type for color in colors | orderBy:'name' ">
- </select>
结果会根据“暗色”和“亮色”分组,在分组里根据字符顺序排序。
ng-options禁用某些选项
- $scope.colors = [
- {name: '黑色', color: 'black', type: "暗色"},
- {name: '白色', color: 'white', type: "亮色", disabled: false},
- {name: '红色', color: 'red', type: "暗色", disabled: true},
- {name: '蓝色', color: 'blue', type: "暗色", disabled: false},
- {name: '黄色', color: 'yellow', type: "亮色", disabled: true}
- ];
- <select ng-model="colorChosen"
- ng-options="color.name group by color.type
- disable when color.disabled for color in colors">
ng-select ng-options ng-repeat的用法与区别的更多相关文章
- 不知道张(zhāng)雱(pāng)是谁?你out了!
张(zhāng)雱(pāng)是谁?也许你已经听说过了,也许你还没听说过呢,不过你一定听说过老刘——刘强东,没错,这二人是有关系的,什么关系,京东是老刘的,而张雱呢?张雱是京东旗下52家关联公司法人代 ...
- KnockoutJS Select 标签 Options绑定
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- vue h render function & render select with options bug
vue h render function & render select with options bug https://github.com/xgqfrms/vue/issues/41 ...
- form:select form:options 标签数据回显
在jsp页面中经常会使用到 form:select form:options 遍历后台List集合生成 select 下拉选择器,但是 form:options 标签并没有提供一个可以回显数据的属性. ...
- select * from 多张表的用法
select * from 多张表的用法 其实就是 inner join select * from Class c,Student s where c.ClassID=s.ClassID ...
- Oracle 变量 之 define variable declare 用法及区别
Oracle 变量 之 define variable declare 用法及区别 Table of Contents 1. 扯蛋 2. define和accept 3. variable 3.1. ...
- 【转载】Delphi异常处理try except语句和try finally语句用法以及区别
Delphi异常处理try except语句和try finally语句用法以及区别 一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来,记下!主要是前面小部分,后面的是详细说明 ...
- mysql find_in_set 与 in 的用法与区别,mysql范围搜索,mysql范围查询
mysql find_in_set 与 in 的用法与区别 1.find_in_set 用于模糊查询,并且数据库中的值是用英文逗号分隔的: 例如: (1).去字段中查询 select find_in_ ...
- [转载]jQuery中wrap、wrapAll和wrapInner用法以及区别
原文地址:jQuery中wrap.wrapAll和wrapInner用法以及区别作者:伊少君 原文: <ul> <li title='苹果'>苹果</li> ...
- WordPress翻译中 __()、_e()、_x、_ex 和 _n 的用法及区别
编译函数 WordPress使用了下面几个函数来方便语言本地化. __() _e() _x() _ex() _n() 以上所列的函数是用来包含所需翻译的字符串的,根据字符串的不同参数和输出类型,需要使 ...
随机推荐
- ios专题 - socket(1)
二,BSD socket API 简介 BSD socket API 和 winsock API 接口大体差不多,下面将列出比较常用的 API: API接口 讲解 int socket(int add ...
- boost 1.56.0 编译
编译步骤及参数说明: http://www.cnblogs.com/zhcncn/p/3950477.html 编译64位版本: http://www.cnblogs.com/codingmylife ...
- SGU Volume 2
SGU200.Cracking RSA------------------------★高斯消元 SGU207.Robbers -------------------------------数论 SG ...
- ACM HDU Primes(素数判断)
Problem Description Writea program to read in a list of integers and determine whether or not eachnu ...
- 关于DateTime和String转换的容易犯得错误
字符串转换成DateTime 在开发中,常常会有DataTime类型和String类型的互相转换的要求,比较常用的写法是var date = Convert.ToDateTime("2012 ...
- CentOS6.5使用本地光盘做yum源 (参考:http://www.jb51.net/os/RedHat/43343.html)
一.使用光盘做yum源安装软件 mkdir /media/CentOS #新建CentOS挂载目录 mount -t auto /dev/cdrom /media/CentOS #挂载CentOS光 ...
- php Imagick库readImage()报Postscript delegate failed 解决方法(失效)
需要安装 ghostscript http://www.ghostscript.com/download/gsdnld.html
- windows通过Composer安装yii2
1. php.ini 中;extension=php_openssl.dll(取消注释,不然在安装composer过程中会报错) 集成环境最好去php目录中打开php.ini文件,确定;extensi ...
- debug(fmt,args...)调试
1.定义宏(debug.h) #ifndef __DEBUG__H #define __DEBUG__H #include <stdio.h> #ifdef DEBUG #define d ...
- union 与struct的空间计算
一.x86 总体上遵循两个原则: 整体空间----占用空间最大的成员(的类型)所占字节数的整数倍 对齐原则----内存按结构成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类 ...