我使用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]
?
答案 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">