我有简单的对象:
"socials": {
"f": "#/facebook/",
"B": "#/behance/",
"d": "#/dribble/",
"L": "#/linkedin/",
"P": "#/pinterest/"
}
当我尝试使用ng-repeat="(key, value) in data.socials"
时,它会这样排序:B L P d f。
$ index捕获错误的索引,就像它已经订购一样。如何在jSON文件中正确订购?或者我怎样才能获得使用orderBy: correctIndex
的正确索引?我找到了一个小提琴,显示了一个完全相同的问题:http://jsfiddle.net/zMjVp/
答案 0 :(得分:4)
ngRepeat
按字母顺序迭代对象键,以$ index(see the code for ngRepeat on Github)管理跟踪项目。
要控制ngRepeat
中的迭代顺序,您应该将对象结构转换为保证迭代排序的数组:
<强> JavaScript的:强>
var jsonData = {
"socials": {
"f": "#/facebook/",
"B": "#/behance/",
"d": "#/dribble/",
"L": "#/linkedin/",
"P": "#/pinterest/"
}
};
var socialsList = [];
angular.forEach(jsonData.socials, function(value, key){
socialsList.push({
key: key,
value: value
});
});
$scope.socialsList = socialsList;
<强> HTML:强>
然后更新HTML以迭代列表而不是对象。
<div ng-repeat="item in socialsList">
<p> {{item.key}} : {{item.value}} </p>
</div>
注:的
除非您使用delete
运算符,否则通常可以依赖for...in
循环的顺序。它不是保证,但它通常是可靠的。 See the MDN documentation on for...in loops