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 相关文章推荐
一个不错的应用,用于提交获取文章内容,不推荐用
Mar 03 Javascript
jQuery timers计时器简单应用说明
Oct 28 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
jQuery实现切换字体大小的方法
Mar 10 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
Nov 01 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
Jun 06 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
Vue实现本地购物车功能
Dec 05 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
PHP文件上传原理简单分析
2011/05/29 PHP
在PHP 7下安装Swoole与Yar,Yaf的方法教程
2017/06/02 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
Jquery多选框互相内容交换的实例代码
2013/07/04 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
全面解析Python的While循环语句的使用方法
2015/10/13 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
python3+PyQt5使用数据库窗口视图
2018/04/24 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
python自动生成sql语句的脚本
2021/02/24 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
总经理助理的职责
2014/03/14 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
门面房租房协议书
2014/08/20 职场文书
国庆节活动总结
2014/08/26 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python