AngularJS实现在ng-Options加上index的解决方法


Posted in Javascript onNovember 03, 2016

本文实例讲述了AngularJS实现在ng-Options加上index的解决方法。分享给大家供大家参考,具体如下:

Angularjs交流群中有位童学问道如何为Angular select的ng-Options像Angularjs的ng-Repeat一样加上一个索引$index.

其实对于这个问题来说Angular本身并未提供$index之类的变量供使用。但是也不是说对于这个问题我们就没有解决方案。

把这个问题换成角度来看,我们所需要的就是js数组的下标,所以我们如果我们能够在对象上加入下标,使用表达式作为option的label就能解决了。

但是第一印象让我想起的是js数组本来就是一个key/value的对象,只是key为数组下标而已,所以有了如下之设计:

html:

<pre>{{ a | json }}</pre>
<select ng-model="a" ng-options="value.field as getDesc1(key,value) for (key,value) in t"></select>

js:

$scope.getDesc1 = function(key, value) {
  return (parseInt(key, 10) + 1) + "->" + value.field;
};

可是不幸的是如果对于JavaScript你若将他作为key/value对象那么key将是无序的所以,出现了无序的下标如下:

<select ng-model="a" ng-options="l.field as getDesc1(key,value) for (key,value) in t " class="ng-valid ng-dirty">
 <option value="0" >1->jw_companyTalent</option>
 <option value="1" >2->jw_reportgroup</option>
 <option value="10" >11->jw_ads</option>
 <option value="11" >12->jw_jobcomment</option>
 <option value="12" >13->jw_companyInfo</option>
 ....
</select>

所以这样是无法解决的。还好博主还有一招,ngOptions支持Angularjs的filter,所以我们可以对数据源对象上加上一个order字段标示下标作为序号。并且你可以在一个2年前的Angular的issue中看到Angular已经fix issue,option会对数组进行按下标顺序生成。

html:

<pre>{{ b | json }}</pre>
<select ng-model="b" ng-options="l.field as getDesc(l) for l in t | index "></select>

js:

var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
   $scope.t = [{
    "field": "jw_companyTalent"
   }, {
    "field": "jw_reportgroup"
   }];
   $scope.getDesc = function(l) {
    return l.order + "->" + l.field;
   };
}).filter("index", [
   function() {
    return function(array) {
     return (array || []).map(function(item, index) {
      item.order = index + 1;
      return item;
     });
    };
   }
]);

这下option是按照有序的生成,最后我们终于能完美解决了,所以本文也将收尾。在最后在附上可运行的demoplnkr ngOptions index;

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
你的 mixin 真的兼容 ECMAScript 5 吗?
Apr 11 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
javascript数字验证的实例代码(推荐)
Aug 20 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
JS写XSS cookie stealer来窃取密码的步骤详解
Nov 20 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
微信小程序加载机制及运行机制图解
Nov 27 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
Nov 09 Javascript
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 #Javascript
基于vuejs+webpack的日期选择插件
May 21 #Javascript
Vue.js创建Calendar日历效果
Nov 03 #Javascript
AngularJS中transclude用法详解
Nov 03 #Javascript
基于Vue2的移动端开发环境搭建详解
Nov 03 #Javascript
AngularJS控制器之间的通信方式详解
Nov 03 #Javascript
最细致的vue.js基础语法 值得收藏!
Nov 03 #Javascript
You might like
星际RPG字典
2020/03/04 星际争霸
解析php中array_merge与array+array的区别
2013/06/21 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
JQuery 1.3.2以上版本中出现pareseerror错误的解决方法
2011/01/11 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
python将txt文件读取为字典的示例
2018/12/22 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
一套Java笔试题
2016/08/20 面试题
中职应届生会计求职信
2013/10/23 职场文书
邀请函怎么写
2015/01/30 职场文书
九九重阳节致辞
2015/07/31 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript