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 数组排序详解
Oct 22 Javascript
深入理解javascript变量声明
Nov 20 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
Jan 07 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
原生JS实现图片懒加载之页面性能优化
Apr 26 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 Javascript
es6 super关键字的理解与应用实例分析
Feb 15 Javascript
vue实现数字滚动效果
Jun 29 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防止页面重复刷新的具体实现
2014/01/09 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
vue2.0 路由模式mode=&quot;history&quot;的作用
2018/10/18 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
20行python代码实现人脸识别
2019/05/05 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
竞选团支书演讲稿
2014/04/28 职场文书
思想政治表现评语
2015/01/04 职场文书
归途列车观后感
2015/06/17 职场文书
宾馆安全管理制度
2015/08/06 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python