AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题


Posted in Javascript onJanuary 21, 2017

本文实例讲述了AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题。分享给大家供大家参考,具体如下:

我们可以使用ng-repeat指令遍历一个JavaScript数组,当数组中有重复元素的时候,AngularJS会报错:

Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: user in users, Duplicate key: number:1。下面的代码就会报错:

<html>
 <head>
  <script src="angular-1.2.2/angular.js"></script>
  <script>
     function rootController($scope,$rootScope,$injector)
     {
      $scope.dataList = [1,2,1];
     }
  </script>
 </head>
 <body ng-app ng-controller="rootController">
    <div ng-repeat="data in dataList">
      {{data}}
    </div>
 </body>
</html>

这是因为ng-Repeat不允许collection中存在两个相同Id的对象。

For example: item in items is equivalent to item in items track by $id(item). This implies that the DOM elements will be associated by item identity in the array.

对于数字或者字符串等基本数据类型来说,它的id就是它自身的值。因此数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的track by表达式。

// 业务上自己生成唯一的id
item in items track by item.id
//或者直接拿循环的索引变量$index来用
item in items track by $index

如果是javascript对象类型数据,那么就算内容一摸一样,ng-repeat也不会认为这是相同的对象。如果将上面的代码中dataList,那么是不会报错的。比如$scope.dataList = [{"age":10},{"age":10}];

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
Sep 16 Javascript
js实现按钮加背景图片常用方法
Nov 01 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
基于jquery实现全屏滚动效果
Nov 26 Javascript
微信小程序 教程之事件
Oct 18 Javascript
浅谈移动端之js touch事件 手势滑动事件
Nov 07 Javascript
JS获取子、父、兄节点方法小结
Aug 14 Javascript
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
Vue+element-ui 实现表格的分页功能示例
Aug 18 Javascript
微信小程序 九宫格实例代码
Jan 21 #Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 #Javascript
巧用canvas
Jan 21 #Javascript
javascript阻止事件冒泡和浏览器的默认行为
Jan 21 #Javascript
js验证手机号、密码、短信验证码代码工具类
Jun 24 #Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 #Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 #Javascript
You might like
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
深入探讨JavaScript String对象
2015/03/09 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
说一说Python logging
2016/04/15 Python
python实现接口并发测试脚本
2019/06/25 Python
appium+python adb常用命令分享
2020/03/06 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
化工专业应届生求职信
2013/11/08 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
求职信模板怎么做
2014/01/26 职场文书
党员服务承诺书
2014/05/28 职场文书
联片教研活动总结
2014/07/01 职场文书
商品陈列协议书
2014/09/29 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
学校德育工作总结2015
2015/05/11 职场文书
预备党员表决心的话
2015/09/22 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python