问题描述
<p ng-repeat='item in image_result'> <p ng-click='changePic(item)'><!--<img ng-if='item.length' src='https://www.6hehe.com/wenda/{{item}}'>--><img ng-src='https://www.6hehe.com/wenda/{{item}}' style='width:100%;height:100%;'><!--<p style='background: url({{item}});background-size: 100% 100%;'></p>--> </p> <p ng-click='deletePic(item)'><span class='ion-close-circled'></span></p> </p>js 调用原生 var data = [’取照片’]; $scope.curPictureIndex = -1;//当前图片索引 SGPlugin.showSelectedView($.proxy(self.onSelectPictureSuccess, self), data); 原生返回 /**
图片选择成功,显示图片并存储 **/ $scope.onSelectPictureSuccess = function(imageData) {
var self = this;var imageDataTmp;if (self.SGPlugin.isAndroid()) { imageDataTmp = 'data:image/jpeg;base64,' + imageData;} else { imageDataTmp = imageData;}// 存储、置换该图片var imageResultArray = $scope.image_result;imageResultArray = _.isEmpty(imageResultArray) ? new Array() : imageResultArray;if(self.curPictureIndex != -1){ imageResultArray[self.curPictureIndex] = imageDataTmp;}else { imageResultArray.push(imageDataTmp);}$scope.image_result = imageResultArray;$scope.$apply();
} 不重复的照片显示没有问题 上传重复的照片 有数据 但是不显示 求原因 报错
Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use ’track by’ expression to specify unique keys. Repeater: item in image_result
问题解答
回答1:问题原因是 image_result 数组中对象的数据类型是字符串,因为ng-repeat 不允许集合中存在两个相同 id 的对象,对于数字或者字符串等基本数据类型来说,它的 id 就是它自身的值。因此数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的 track by表达式。
解决方案:
item in items track by item.id // 业务上自己生成唯一的id
item in items track by $index //或者直接拿循环的索引变量$index来用
另外需要注意的是,如果数组中是存放对象:
HTML 代码片段
<body ng-app='exeApp'> <ul ng-controller='MainCtrl'> <li ng-repeat='user in users'> {{user.name}} </li> </ul></body>
JavaScript 代码
angular.module(’exeApp’, []). controller(’MainCtrl’, [’$scope’,function($scope) {$scope.users = [ {name: ’fer’}, {name: ’fer’}]}]);
运行结果:
具体示例,请参考JSBin
回答2:<p ng-repeat='item in image_result track by $index'>
把这里改一下试试,angular的ng-repeat循环数组如果数组内容重复会报错
回答3:报错的原因是在ng-repeat
默认在ng-repeat的时候每一个item都要保证是唯一的,因为你有重复的数据,所以会报出这样的错误信息
报错信息已经告诉你解决方案了 使用track by
ng-repeat='item in items track by $index'