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 相关文章推荐
验证控件与Button的OnClientClick事件详细解析
Dec 04 Javascript
最流行的Node.js精简型和全栈型开发框架介绍
Feb 26 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
Oct 09 Javascript
js弹出对话框方式小结
Nov 17 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
Feb 25 Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 Javascript
深入理解javascript中的 “this”
Jan 17 Javascript
微信web端后退强制刷新功能的实现代码
Mar 04 Javascript
jsonp跨域获取数据的基础教程
Jul 01 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
JavaScript实现简单日历效果
Sep 11 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 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
服务器端解压缩zip的脚本
2006/12/22 PHP
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
javascript第一课
2007/02/27 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
浅析javascript的return语句
2015/12/15 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
详解python破解zip文件密码的方法
2020/01/13 Python
python add_argument()用法解析
2020/01/29 Python
Python如何用filter函数筛选数据
2020/03/05 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
公开承诺书格式
2014/05/21 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
运动会稿件100字
2014/09/24 职场文书
搬迁通知
2015/04/20 职场文书
领导干部学习心得体会
2016/01/23 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android