Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS中的动态orderBy_Javascript_Angularjs_Sorting_Angularjs Ng Repeat - Fatal编程技术网

Javascript AngularJS中的动态orderBy

Javascript AngularJS中的动态orderBy,javascript,angularjs,sorting,angularjs-ng-repeat,Javascript,Angularjs,Sorting,Angularjs Ng Repeat,我有一个要根据下拉菜单中的值动态排序的对象数组。到目前为止,我的列表中有以下内容: ng-repeat="item in filteredItems = (items | filter:searchInput | orderBy:canBeAnything)" 但问题是排序可以是对象的属性,也可以是使用函数计算的值。它还应该能够以降序方式进行排序(可选) 我知道我可以通过传递对象的属性,将字符串用于order后面的canByAnything变量,如: “-creationDate” // de

我有一个要根据下拉菜单中的值动态排序的对象数组。到目前为止,我的列表中有以下内容:

ng-repeat="item in filteredItems = (items | filter:searchInput | orderBy:canBeAnything)"
但问题是排序可以是对象的属性,也可以是使用函数计算的值。它还应该能够以降序方式进行排序(可选)

我知道我可以通过传递对象的属性,将字符串用于order后面的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
但我不知道也不想实现的是:

  • 如何组合它,以便我可以使用函数与对象的属性/属性组合进行排序。我指的是一个或另一个,动态地,基于用户选择的内容。可以是属性或计算值,降序或升序
  • 如何以降序方式对计算值进行排序

orderBy:myCalculatedValueFunction
更新为类似于
orderBy:DynamicRecorderFunction

错误的

$scope.dynamicOrderFunction = function() {
    if (orderByString) {
        return '-creationDate';
    }
    else {
        return myCalculatedValueFunction;
    }
}
orderBy
还有一个接受布尔值的第三个属性,当
true
时,它将反转orderBy。(
orderBy:dynamicOrderFunction:reverseOrder
其中
$scope.reverseOrder=true;//或false


编辑

这样在字符串和函数之间切换orderBy实际上会遇到问题。签出工作的动态订单函数

$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;
}

因此,您必须创建自己的过滤器,并在其中执行任何您想要的操作, 谷歌上有很多例子。只需搜索:

角度自定义过滤器

在过去的几天里,我在创建过滤器时遇到了一些问题,我发现:

我已经在我的附件中立即添加了它,我知道我会很快使用它。也许这对你也有帮助。 如果我的回答能帮助你解决问题,别忘了让它生效;)