您不需要将对象转换为数组以便在ng-repeat
中迭代它。你可以使用下面的语法:
<div ng-repeat="(key, value) in items">{{key}} => {{value}}</div>
的ngRepeat
Documentation。
不幸的是,这种方法不适用于orderBy
过滤器。要按特定顺序遍历对象属性,您需要实现自己的过滤器。这可能是类似的东西:
的JavaScript
angular.module('app', []).
filter('orderByKey', ['$filter', function($filter) {
return function(items, field, reverse) {
var keys = $filter('orderBy')(Object.keys(items), field, reverse),
obj = {};
keys.forEach(function(key) {
obj[key] = items[key];
});
return obj;
};
}]);
HTML
<div ng-repeat="(key, value) in items | orderByKey:'-'">{{key}} => {{value}}</div>
Plunker
http://plnkr.co/edit/DJo0Y6GaOzSuoi202Hkj?p=preview
但是,即使这种方法只能从1.4.x
开始工作,因为如文档中所述,在1.4.x
之前的AngularJS将按照字母顺序对对象属性进行排序,同时在ngRepeat
中迭代它们。
为了使其在角1.3.x
工作,甚至1.2.x
你可以执行对象的变换对象的阵列,其中的每一个将包含key
和value
性质。这样您就可以在ngRepeat
中使用它,并结合使用滤波器,包括orderBy
。下面是一个代码:
的JavaScript
angular.module('app', []).
factory('srv', ['$http', function($http) {
var items = [],
loaded = false;
return {
getItems: function() {
if(!loaded) { // Lazy loading
$http.get('data.json').success(function(data) { // {key1: 'val1', key2: 'val2'}
Object.keys(data).forEach(function(key) {
items.push({key: key, value: data[key]});
});
});
loaded = true;
}
return items; // [{key: 'key1', value:'val1'}, {key:'key2', value: 'val2'}]
}
};
}]).
controller('ctrl', ['$scope', 'srv', function($scope, srv) {
$scope.items = srv.getItems();
}]);
HTML
<div ng-repeat="item in items | orderBy:'-key'">{{item.key}} => {{item.value}}</div>
Plunker
http://plnkr.co/edit/UXmlm1GKYRZzrOV5pMYT?p=preview
json_encode解析联想PHP中的数组作为json中的对象。 – Sagar
关联数组**是**(JS-)对象。目前还不清楚你想要什么样的数据,你对'[1432070505,“你好”,“阿里阿赫莫多”]'满意吗? – Siguza
好的,解决问题的方法是什么? – vaved