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 相关文章推荐
EasySlider 基于jQuery功能强大简单易用的滑动门插件
Jun 11 Javascript
JavaScript判断DOM何时加载完毕的技巧
Nov 11 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
jquery改变tr背景色的示例代码
Dec 28 Javascript
javascript 闭包详解
Jul 02 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
layui表格实现代码
May 20 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
深入理解Vue2.x的虚拟DOM diff原理
Sep 27 Javascript
浅谈Angular 的变化检测的方法
Mar 01 Javascript
详解 微信小程序开发框架(MINA)
May 17 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
Jul 28 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
基于文本的留言簿
2006/10/09 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
一个可以显示阴历的JS代码
2007/03/05 Javascript
JavaScript中的Location地址对象
2008/01/16 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
小程序实现留言板
2018/11/02 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Django开发中复选框用法示例
2018/03/20 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
Python笔记之facade模式
2019/11/20 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
毕业生幼师求职自荐信
2013/10/01 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
副校长2015年教育教学工作总结
2015/07/27 职场文书
Java基础——Map集合
2022/04/01 Java/Android