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 相关文章推荐
JavaScript 利用StringBuffer类提升+=拼接字符串效率
Nov 24 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
浅谈JavaScript函数节流
Dec 09 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
Popup弹出框添加数据实现方法
Oct 27 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
微信小程序绘制图片发送朋友圈
Jul 25 Javascript
Vue 组件复用多次自定义参数操作
Jul 27 Javascript
vue prop传值类型检验方式
Jul 30 Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 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
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
2018/04/06 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
keras之权重初始化方式
2020/05/21 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
游戏商店:Eneba
2020/04/25 全球购物
学生会副主席竞聘书
2014/03/31 职场文书
企业口号大全
2014/06/12 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js