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 相关文章推荐
地址栏上的一段语句,改变页面的风格。(教程)
Apr 02 Javascript
javascript检测页面是否缩放的小例子
May 16 Javascript
键盘KeyCode值列表汇总
Nov 26 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
JavaScript预解析及相关技巧分析
Apr 21 Javascript
JS简单获取及显示当前时间的方法
Aug 03 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 Javascript
Koa 使用小技巧(小结)
Oct 22 Javascript
node express使用HTML模板的方法示例
Aug 22 Javascript
js实现圆形显示鼠标单击位置
Feb 11 Javascript
微信小程序实现电子签名并导出图片
May 27 Javascript
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
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
js捕获鼠标滚轮事件代码
2013/12/16 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
JS组件Bootstrap Table使用方法详解
2016/02/02 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
loading动画特效小结
2017/01/22 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
Python操作MongoDB详解及实例
2017/05/18 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
如何进行Linux分区优化
2016/09/13 面试题
团组织关系介绍信
2014/01/12 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
楚门的世界观后感
2015/06/03 职场文书
2019经典广告词集锦!
2019/07/02 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python