一尘不染

在AngularJS中动态排序

angularjs

我有一个要根据下拉菜单中的值动态排序的对象数组。到目前为止,这是我的清单:

ng-repeat="item in filteredItems = (items | filter:searchInput | orderBy:canBeAnything)"

但是问题是排序可以是对象的属性,也可以是使用函数的计算值。它还应该能够以降序排序(可选)。

我知道我可以在orderBy后面使用字符串作为canByAnything变量,并传递对象的属性,例如:

“-creationDate” // descending ordering on creation date
“customer.lastname” // ascending ordering on customers last name

我也知道我可以通过如下函数订购:

orderBy:myCalculatedValueFunction // will order in an ascending way based on a calculated value, for example calculating the total price of the object if it was an order or something

但是我不知道并且想要实现的是:

  • 如何将其组合在一起,以便我可以结合对象的属性/属性使用函数进行排序。我的意思是根据用户的选择动态地选择一个或另一个。可以是属性或计算值,可以是降序或升序。
  • 如何以降序方式对计算值排序

阅读 232

收藏
2020-07-04

共1个答案

一尘不染

更新orderBy:myCalculatedValueFunctionorderBy:dynamicOrderFunction

错误

$scope.dynamicOrderFunction = function() {
    if (orderByString) {
        return '-creationDate';
    }
    else {
        return myCalculatedValueFunction;
    }
}

orderBy还有一个3rd属性,它接受一个布尔值,当时将反转orderBy
true。(orderBy:dynamicOrderFunction:reverseOrder$scope.reverseOrder = true; // or false


编辑

您实际上会遇到尝试以这种方式在字符串之间切换orderBy的问题。检出此jsfiddle以获取有效的动态订单功能。

$scope.dynamicOrder = function(user) {
    var order = 0;
    switch ($scope.order.field) {
        case 'gender':
            order = gender_order[user.gender];
            break;
        default:
            order = user[$scope.order.field];
    }
    return order;
}
2020-07-04