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;
}
因此,您必须创建自己的过滤器,并在其中执行任何您想要的操作, 谷歌上有很多例子。只需搜索: 角度自定义过滤器 在过去的几天里,我在创建过滤器时遇到了一些问题,我发现: 我已经在我的附件中立即添加了它,我知道我会很快使用它。也许这对你也有帮助。 如果我的回答能帮助你解决问题,别忘了让它生效;)