ios - ionic 中使用 cordova camera 插件 上传重复图片 不显示
ringa_lee
ringa_lee 2017-04-18 09:55:37
0
3
516
<p  class="feedback-row feedback-list-imgs" ng-repeat="item in image_result">
      <p class="feedback-list-img" ng-click="changePic(item)">
        <!--<img ng-if="item.length" src="{{item}}">-->
        <img ng-src="{{item}}" style="width:100%;height:100%;">
        <!--<p class="img" style="background: url({{item}});background-size: 100% 100%;"></p>-->
      </p>
      <p class="img-delete" 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

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
左手右手慢动作

問題原因是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

巴扎黑

把這裡改一下試試,angular的ng-repeat循環數組如果數組內容重複會報錯

黄舟

報錯的原因是在ng-repeat

預設在ng-repeat的時候每一個item都要保證是唯一的,因為你有重複的數據,所以會報出這樣的錯誤訊息

報錯訊息已經告訴你解決方案了 使用track by

ng-repeat="item in items track by $index"
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板