从ng-repeat中移除自动排序

7

我有一个JSON对象,它没有按升序排序。

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

我在html模板中使用了ng-repeat来展示数据。我获得了结果,但是顺序变成了升序。
Forms
Grids And Tables
MAX
Navigation
Services & APIs

如何防止angular js自动排序?

请查看此链接


3个回答

9

正如建议的那样,无法对对象键进行排序。但是您可以在使用这些对象键创建的数组上进行排序 -

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

这就是我在回答中所说的,你可以迭代一个单独的数组并对其进行索引。不过我没有想到使用Object.keys。那是个相当好的主意。 - Daniel Tabuenca
是啊,我有点傻瓜了,应该只编辑你的回答,而不是添加一个新的回答。 - Mukesh Soni

2
在JavaScript中迭代对象键的顺序是技术上未定义的。虽然大多数浏览器会按照定义的顺序遍历对象,但您不应依赖此行为。
在Angular中,ng-repeat需要始终对键进行排序,以使顺序具有确定性,即使在添加键之后也是如此。无法更改此行为,因为在动态添加或删除键时将破坏指令。
如果您需要依赖数据的排序,则对象哈希不是正确的数据结构。您应该将数据重新格式化为数组,或者只需创建一个单独的数组并按顺序重复操作。使用键索引对象。

0

你需要手动命名你的键,例如1、2、3、4、5,然后在前端使用string.slice(1)进行切片。希望能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接