如何在angularjs中按降序排列对象数组?

时间:2016-07-22 20:06:54

标签: angularjs angular-filters angularjs-orderby

我有一个非常简单的对象数组,我想在javascript中使用$filter('orderBy')对其进行排序。不知怎的,它似乎不起作用。 jsFiddle

这是代码

var app = angular.module('myApp', []);

app.controller('myController', function($scope, $filter){
    var person = [{
  name : "Saras"
  },
  {
  name : "Arya"
  }];
  $filter('orderBy')(person, 'name');
  console.log(person);
});

我不明白为什么我不能让这个工作?感谢帮助。解决方案应该是JS而不是HTML。

4 个答案:

答案 0 :(得分:8)

在orderBy参数上添加+或 - 前缀将按+(升序)或 - (desc)排序;

示例:

<li ng-repeat="x in customers | orderBy : '-city'">
    {{x.name + ", " + x.city}}
</li>

更多信息:http://www.w3schools.com/angular/ng_filter_orderby.asp

或者如果您想要console.log,那么只需在引号中添加name作为参数:

$filter('orderBy')(person, 'name');

答案 1 :(得分:7)

您应该将第二个参数作为属性名称name传递,然后将过滤后的结果分配到所需的范围变量中。因此,不需要在UI ng-repeat输出上进行任何过滤。

$scope.person = $filter('orderBy')(person, 'name');

<div  ng-repeat="p in person">
   {{p.name}}
</div>

Forked Fiddle这里

如果你想在视图上看到它,你应该将该属性保存在一个范围变量上,或者你也可以在客户端进行这种简单的过滤,同时显示记录。

<div  ng-repeat="p in person | orderBy: 'name'">
   {{p.name}}
</div>

Demo here

答案 2 :(得分:0)

function openNav() { document.getElementsByTagName("body").style.overlay = "hidden"; document.getElementById("mySidenav").style.height = "50%"; } function closeNav() { document.getElementById("mySidenav").style.height = "0"; }

true表示降序,并且 升序为假

答案 3 :(得分:-1)

示例:

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

在表达式前使用'-'符号