我有一个要根据下拉菜单中的值动态排序的对象数组。到目前为止,这是我的清单:
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
但是我不知道并且想要实现的是:
更新orderBy:myCalculatedValueFunction为orderBy:dynamicOrderFunction:
orderBy:myCalculatedValueFunction
orderBy:dynamicOrderFunction
错误 $scope.dynamicOrderFunction = function() { if (orderByString) { return '-creationDate'; } else { return myCalculatedValueFunction; } }
错误
$scope.dynamicOrderFunction = function() { if (orderByString) { return '-creationDate'; } else { return myCalculatedValueFunction; } }
orderBy还有一个3rd属性,它接受一个布尔值,当时将反转orderBy true。(orderBy:dynamicOrderFunction:reverseOrder在$scope.reverseOrder = true; // or false)
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; }