我如何能得到一个反向数组在角? 我试图使用orderBy过滤器,但它需要一个谓词(例如。'name')排序:

<tr ng-repeat="friend in friends | orderBy:'name':true">
      <td>{{friend.name}}</td>
      <td>{{friend.phone}}</td>
      <td>{{friend.age}}</td>
<tr>

是否有一种方法可以反转原始数组,而不需要排序。 像这样:

<tr ng-repeat="friend in friends | orderBy:'':true">
      <td>{{friend.name}}</td>
      <td>{{friend.phone}}</td>
      <td>{{friend.age}}</td>
<tr>

当前回答

我建议使用这样的自定义过滤器:

app.filter('reverse', function() {
  return function(items) {
    return items.slice().reverse();
  };
});

然后可以这样使用:

<div ng-repeat="friend in friends | reverse">{{friend.name}}</div>

看它在这里工作:活塞演示


这个过滤器可以根据您的需要进行定制。我在演示中提供了其他示例。一些选项包括在执行反转之前检查变量是否是数组,或者使其更宽松,以允许反转更多内容,如字符串。

其他回答

如果您使用1.3。X,你可以使用下面的方法

{{ orderBy_expression | orderBy : expression : reverse}}

按出版日期降序列出图书

<div ng-repeat="book in books|orderBy:'publishedDate':true">

来源:https://docs.angularjs.org/api/ng/filter/orderBy

当你在。net和Angular中使用MVC时,你总是可以像这样使用orderbydescent()来查询你的db:

var reversedList = dbContext.GetAll().OrderByDecending(x => x.Id).ToList();

在Angular方面,它在一些浏览器(IE)中已经被反转了。当支持Chrome和FF时,你需要添加orderBy:

<tr ng-repeat="item in items | orderBy:'-Id'">

在本例中,您将对. id属性按降序排序。如果您正在使用分页,这将变得更加复杂,因为只有第一个页面将被排序。你需要通过控制器的.js过滤器文件来处理这个问题,或者以其他方式。

我建议使用这样的自定义过滤器:

app.filter('reverse', function() {
  return function(items) {
    return items.slice().reverse();
  };
});

然后可以这样使用:

<div ng-repeat="friend in friends | reverse">{{friend.name}}</div>

看它在这里工作:活塞演示


这个过滤器可以根据您的需要进行定制。我在演示中提供了其他示例。一些选项包括在执行反转之前检查变量是否是数组,或者使其更宽松,以允许反转更多内容,如字符串。

从Angular 1.4.5开始,orderBy过滤器执行稳定的排序。(参见GitHub pull request https://github.com/angular/angular.js/pull/12408)

因此,使用常量谓词和反向设置为true就足够了:

<div ng-repeat="friend in friends | orderBy:0:true">{{friend.name}}</div>

你也可以使用.reverse()。它是一个原生数组函数

<div ngn -repeat=“朋友们的朋友。反向()”>{{朋友}</div>