从ng-repeat中删除自动排序

时间:2013-12-10 06:34:59

标签: angularjs ng-repeat

我有一个json对象。它不按升序排序。

 $scope.myData = {
        "MAX" : "some value",
        "Forms" : "some value",
        "Grids And Tables" : "some value",
        "Navigation" : "some value",
        "Services & APIs" : "some value"
  }

我使用ng-repeat在我的html模板中显示它。我得到了结果,但订单已按升序改变。

Forms
Grids And Tables
MAX
Navigation
Services & APIs

如何防止角度js自动排序?

选中此link

3 个答案:

答案 0 :(得分:9)

根据建议,无法对对象键进行排序。购买可以对使用这些对象键创建的数组进行排序 -

$scope.keys = Object.keys($scope.myData);
<ul>
  <li ng-repeat="key in keys">
    {{key}} - 
    {{myData[key]}}
  </li>
</ul>

答案 1 :(得分:2)

在javascript中迭代对象键的顺序在技术上是未定义的。虽然大多数浏览器将按定义的顺序迭代对象,但您不应该依赖此行为。

在有角度的情况下,ng-repeat需要始终对键进行排序,以便即使在事后添加键也可以确定顺序。无法更改此行为,因为它会在动态添加或删除键时中断指令。

如果您需要依赖数据的排序,那么对象哈希就不是正确的数据结构。您应该将数据重新格式化为数组,或者只是按键的顺序创建一个单独的数组,并对其进行重复操作。使用键索引对象。

答案 2 :(得分:0)

您必须手动命名您的密钥,如1,2,3,4,5然后在前端用string.slice(1)切片。希望它有所帮助。