排序时ng-repeat错误$ index

时间:2014-07-03 00:09:06

标签: angularjs ng-repeat

我有简单的对象:

"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/

1 个答案:

答案 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