【问题标题】:Angular - using orderBy in ng-repeat to order in increasing orderAngular - 在 ng-repeat 中使用 orderBy 以递增顺序排序
【发布时间】:2015-01-11 10:23:44
【问题描述】:

我有一个这样的 JSON:

"db" : {
    "x" : {
        "0" : "A",
        "1" : "B",
        "2" : "C",
        "3" : "D",
        "4" : "E",
        "5" : "F",
        "6" : "G",
        "7" : "H",
        "8" : "I",
        "9" : "J",
        "10" : "K",
        "11" : "L",
        "12" : "M",
        "13" : "N"
    }

在我的控制器中:

$scope.object = currentObject.get();
$scope.x = $scope.object.db.x;

(currentObject.get() 是我从数据库中获取数据的函数,在数据库中有我之前编写的 JSON)

在视图中:

<div ng-repeat="y in x">{{y}}</div>

我希望结果是这样的:

<div>A</div>
<div>B</div>
<div>C</div>
etc. etc.

相反,我看到的是:

<div>A</div>
<div>K</div>
<div>L</div>
<div>M</div>
<div>N</div>
<div>B</div>
etc. etc.

如何在 ng-repeat 中使用 orderBy 解决这个问题?

【问题讨论】:

  • 无法在 javascript 中订购对象。改用数组
  • 那么,我是否要创建一个与 JSON 对象具有相同组件的数组?真的没有别的办法了吗?
  • 但是我尝试使用数组并且它有效。目前,谢谢你:)
  • 您可以在收到后将其映射到数组,但大多数数据集都以数组形式出现,而 Angular 最适合使用数组
  • 为什么你x 设为一个数组,因为它的属性都具有数字键名且没有跳过的值?

标签: javascript json angularjs


【解决方案1】:

我还不能评论添加到@charlietfl 的回复中,但这里有一个关于 ngRepeat 支持按对象键排序的未解决问题:https://github.com/angular/angular.js/issues/8458

除非数据中的键是值的 ID,否则数组是肯定的方法。您仍然需要一个数组,但您的数据可能看起来像这样;

var x = [
    { id: 0, value: 'A' },
    { id: 1, value: 'B' },
    { id: 2, value: 'C' },
    etc...
]

你可以使用:

<div ng-repeat="obj in x | orderBy: 'id'">{{ obj.value }}</div>

【讨论】:

  • 您还可以制作自定义过滤器,以便在表达式/模板中动态地将对象转换为数组。
  • 啊,我漏掉了那部分。是的。许多人建议使用toArray 过滤器将对象映射到数组。该建议实际上也在问题链接中。
猜你喜欢
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 2014-09-13
  • 2013-10-17
  • 2016-01-26
  • 2013-10-23
相关资源
最近更新 更多