为什么我会收到错误错误:Angular JS中的[ngRepeat:dupes]?

时间:2015-05-04 11:43:15

标签: angularjs

我使用ng-repeat

<option ng-selected="key == formData.city" ng-repeat="(key, value) in data.cities | orderBy:value" value="{{key}}">{{value}}</option>

data.cities是数组。

此外,我还有从AJAX响应中获取城市数组并将其设置为存在数组$scope.data.cities的方法:

request.success(function (data) {
      var arr = []
      angular.forEach(data.res, function(item) {
      arr[item.id] = item.name;
      });

  $scope.data.cities = arr;
});

为什么在回复后我收到错误:[ngRepeat:dupes]

1 个答案:

答案 0 :(得分:2)

您必须对track by $index使用ng-repeat以避免重复:

ng-repeat="(key, value) in data.cities track by $index | orderBy:value"

https://docs.angularjs.org/error/ngRepeat/dupes

<强>更新 内存泄漏可能是使用数组的原因:

var arr = [];

例如,如果您的cities.id看起来像1001,那么这将产生一个包含1000个空项目和一个城市的数组。

在您的情况下,我建议使用Object代替Array

request.success(function (data) {
    var obj = {};
    angular.forEach(data.res, function(item) {
       obj[item.id] = item.name;
    });

    $scope.data.cities = obj;
}); 

此外,您可以在此处将ng-repeat替换为ng-options

<select ng-model="formData.city" ng-options="key as value for (key, value) in data.cities">