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调用wcf并展示出数据的方法
Jul 07 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
Oct 26 Javascript
使用js Math.random()函数生成n到m间的随机数字
Oct 09 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
May 01 Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
May 22 Javascript
微信小程序实现张图片合成为一张并下载
Jul 16 Javascript
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php 获取本机外网/公网IP的代码
2010/05/09 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
教你php如何实现验证码
2016/01/20 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python实现的双色球生成功能示例
2017/12/18 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
keras中的History对象用法
2020/06/19 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
链表面试题-一个链表的结点结构
2015/05/04 面试题
MySQL面试题
2014/01/12 面试题
远程研修随笔感言
2014/02/10 职场文书
高中军训感想300字
2014/03/04 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
财务会计岗位职责
2015/02/03 职场文书
财务稽核岗位职责
2015/04/13 职场文书
小爸爸观后感
2015/06/15 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书