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 相关文章推荐
Javascript的一种模块模式
Mar 22 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
Jun 27 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 Javascript
小程序双头slider选择器的实现示例
Mar 31 Javascript
微信小程序实现购物车功能
Nov 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中转义mysql语句的实现代码
2011/06/24 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python实现的rsa加密算法详解
2018/01/24 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
python解释器spython使用及原理解析
2019/08/24 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
JAVA及PYTHON质数计算代码对比解析
2020/06/10 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2015年检验科工作总结
2015/04/27 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android