我如何能得到一个反向数组在角? 我试图使用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>

当前回答

当你在。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过滤器文件来处理这个问题,或者以其他方式。

其他回答

简单解决方案:-(不需要做任何方法)

ng-repeat = "friend in friends | orderBy: reverse:true"

很抱歉在一年后才提出这个问题,但有一个新的、更简单的解决方案,适用于Angular v1.3.0-rc。5及以上。

在文档中提到: “如果没有提供属性,(例如。'+'),然后数组元素本身用于比较排序"。所以,解决方案是:

ng-repeat="friend in friends | orderBy:'-'"或

ng-repeat="朋友中的朋友| orderBy:'+':true"

这种解决方案似乎更好,因为它不修改数组,也不需要额外的计算资源(至少在我们的代码中)。我已经阅读了所有现有的答案,但仍然更喜欢这个答案。

我自己对这个问题感到沮丧,所以我修改了@Trevor Senior创建的过滤器,因为我遇到了一个问题,我的控制台说它不能使用反向方法。我还想保持对象的完整性,因为这是Angular最初在ng-repeat指令中使用的。在这种情况下,我使用的输入愚蠢(键),因为控制台会感到不安,说有重复,在我的情况下,我需要跟踪$index。

过滤器:

angular.module('main').filter('reverse', function() {
    return function(stupid, items) {
    var itemss = items.files;
    itemss = itemss.reverse();  
    return items.files = itemss; 
  };
});

HTML: <div ng-repeat="item in items track by $index | reverse: items">

如果你使用的是angularjs 1.4.4及以上版本,一个简单的排序方法是使用"$index"。

 <ul>
  <li ng-repeat="friend in friends|orderBy:$index:true">{{friend.name}}</li>
</ul>

视图演示

我补充了一个没有人提到的答案。如果你有服务器,我会试着让服务器来做。如果服务器返回大量记录,客户端过滤可能是危险的。因为您可能会被迫添加分页。如果你有来自服务器的分页,那么客户端筛选顺序,将在当前页面。这会让最终用户感到困惑。因此,如果您有一个服务器,那么将订单与调用一起发送,并让服务器返回它。