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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
jquery BS,dialog控件自适应大小
Jul 06 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
javascript Array 数组常用方法
Apr 05 Javascript
JQuery+EasyUI轻松实现步骤条效果
Feb 22 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 Javascript
js HTML5手机刮刮乐代码
Sep 29 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
Dec 08 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
May 17 Javascript
基于jQuery实现的设置文本区域的光标位置
Jun 15 jQuery
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 Javascript
vue print.js打印支持Echarts图表操作
Nov 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
社区(php&amp;&amp;mysql)一
2006/10/09 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
php 猴子摘桃的算法
2017/06/20 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
javascript tips提示框组件实现代码
2010/11/19 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
详解如何构建Angular项目目录结构
2017/07/13 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
使用Dropzone.js上传的示例代码
2017/10/10 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
Python实现汇率转换操作
2020/05/03 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
如何利用Python写个坦克大战
2020/11/18 Python
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
智能旅行箱:Horizn Studios
2018/04/30 全球购物
教师实习的自我鉴定
2013/10/26 职场文书
技术总监管理职责范本
2014/03/06 职场文书
庆七一主持词
2015/06/29 职场文书
交流会主持词
2015/07/02 职场文书
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS