【问题标题】:Dynamic orderBy in AngularJSAngularJS 中的动态 orderBy
【发布时间】:2015-04-14 19:26:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript angularjs sorting angularjs-ng-repeat


    【解决方案1】:

    orderBy:myCalculatedValueFunction 更新为orderBy:dynamicOrderFunction

    错误

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

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


    编辑

    您实际上会在尝试以这种方式在字符串和函数之间切换 orderBy 时遇到问题。结帐this 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      角度自定义滤镜

      这些天,我在创建过滤器时遇到了一些问题,我发现: https://github.com/a8m/angular-filter

      我已立即将它添加到我的依赖项中,我知道我很快就会使用它。也许它也会帮助你。 如果它可以帮助您解决问题,请不要忘记验证我的答案;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多