AngularJS ng-repeat数组有重复值的解决方法


Posted in Javascript onOctober 23, 2016

前言

大家都知道默认在ng-repeat的时候每一个item都要保证是唯一的,否则console就会打出error告诉你哪个key/value是重复的。

如:

$scope.items = [
 'red',
 'blue',
 'yellow',
 'white',
 'blue'
];

这个数组blue就重复了,html这么遍历它

<li ng-repeat="item in items">{{ item }}</li>

控制台就会抛出一个错误:

AngularJS ng-repeat数组有重复值的解决方法

点击错误链接到Angular官网看详细错误,官网明确给出是因为值重复了:

Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: item in items, Duplicate key: string:blue, Duplicate value: blue

解决方法

这就纳闷了,正常的业务里数组有重复的值是很正常的,数组要硬要搞成唯一的ng-repeat才能遍历就白瞎了,继续往下看,发现官网给了一个解决的方案

<div ng-repeat="value in [4, 4] track by $index"></div>

于是按照这个方案改了一下

<li ng-repeat="item in items track by $index">{{ item }}</li>

刷新网页,内容被正常解析

AngularJS ng-repeat数组有重复值的解决方法

其实ng-repeat还是需要一个唯一的key,只不过你不track的话默认就是item本身,另外也只有在普通数据类型字符串,数字等才会出现这个问题,如果换成Object

$scope.items = [
 ['red'],
 ['blue'],
 ['yellow'],
 ['white'],
 ['blue']
];

html恢复为

<li ng-repeat="item in items">{{ item }}</li>

执行结果:

AngularJS ng-repeat数组有重复值的解决方法

不明白的童鞋那就自己看看下面的运算表达式,猜猜结果是什么,然后在浏览器的控制台试一试你的答案是否正确

[] === []

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
Locate a File Using a File Open Dialog Box
Jun 18 Javascript
EXT中xtype的含义分析
Jan 07 Javascript
JavaScript Event事件学习第一章 Event介绍
Feb 07 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
vue组件学习教程
Sep 09 Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
JavaScript实现京东快递单号查询
Nov 30 Javascript
web前端开发upload上传头像js示例代码
Oct 22 #Javascript
jQuery中$.ajax()方法参数解析
Oct 22 #Javascript
详解Javascript函数声明与递归调用
Oct 22 #Javascript
js中利用cookie实现记住密码功能
Aug 20 #Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 #Javascript
微信开发 消息推送实现代码
Oct 21 #Javascript
微信和qq时间格式模板实例详解
Oct 21 #Javascript
You might like
解析php时间戳与日期的转换
2013/06/06 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
深入理解vue-loader如何使用
2017/06/06 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
Vue router安装及使用方法解析
2020/12/02 Vue.js
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
通过实例了解python property属性
2019/11/01 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
团队精神口号
2014/06/06 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL