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 相关文章推荐
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
jQuery的deferred对象使用详解
Aug 20 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
Js Jquery创建一个弹出层可加载一个页面
May 08 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
jQuery插件实现弹性运动完整示例
Jul 07 jQuery
基于Koa2写个脚手架模拟接口服务的方法
Nov 27 Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 Javascript
解决vue组件props传值对象获取不到的问题
Jun 06 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
Nov 04 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
Protoss兵种对照表
2020/03/14 星际争霸
PHP多例模式介绍
2013/06/24 PHP
php实现mysql封装类示例
2014/05/07 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
JS+php后台实现文件上传功能详解
2019/03/02 Javascript
用node.js写一个jenkins发版脚本
2019/05/21 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python3 enum模块的应用实例详解
2019/08/12 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
P/Invoke是什么
2015/07/31 面试题
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
商场总经理岗位职责
2014/02/03 职场文书
民间借贷借条如何写
2015/05/26 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android