角度A-Z反向排序

时间:2014-04-07 16:02:16

标签: javascript angularjs sorting

我确信我的面前必须有一个简单的解决方案,但是如果我能找到它就该死的。

我通过各种排序选项对大型ng-repeat进行排序,因此我传递了一系列排序选项。用户还可以选择数据的排序方式。

我可以按A-Z排序,但出于某种原因,反之(Z-A)没有按预期工作。

这是一个小提琴http://jsfiddle.net/Tk39P/4/

我正在做的就像我在其他Angular应用程序中使用的许多其他排序功能一样:

return -result.whatever;

那么,我做错了什么? :) 干杯

3 个答案:

答案 0 :(得分:0)

问题是如果result.letter是一个(非空)字符串,

-result.letter

NaN

然后,您可以使用

-result.letter.charCodeAt(0);

Demo

答案 1 :(得分:0)

您应该使用orderByreverse的第三个参数。特别是对于return -string没有意义的字符串。 (如果你是严格单一的字母,单个字母的字母,你可以做return "Z".charCodeAt(0)-string.charCodeAt(index),但它相当丑陋......那么如果string不是一个字母又会怎么样?)

所以只需$watch("orderBy")并相应地设置范围变量$scope.reverse。用它作为:

<li data-ng-repeat="result in results
    | orderBy: [orderByOptions, orderByPriceLowToHigh]:reverse track by $index">

小提琴:http://jsfiddle.net/C3BFf/

答案 2 :(得分:0)

根据此更改您的代码位 $ scope.orderBy =&#39;价格 - 低 - 高&#39 ;;         $ scope.predicate =&#39;价格&#39 ;;         $ scope.reverse = TRUE;

    $scope.orderByOptions = function (result) {
        if ($scope.orderBy == 'price-high-low') {
            $scope.predicate='price';
            $scope.reverse=false;

        }
        else if ($scope.orderBy == 'letter-az') {
            $scope.predicate='letter';
            $scope.reverse=false;

        }
        else if ($scope.orderBy == 'letter-za') {
            $scope.predicate='letter';
            $scope.reverse=true;

        }
        else
        {
            $scope.predicate='price';
            $scope.reverse=true;
        }


    };    

<强> HTML Chnage data-ng-change =&#34; orderByOptions()&#34;

  <select data-ng-change="orderByOptions()" class="order-by" data-ng-model="orderBy" id="orderBy" data-ng-show="results.length > 0">

检查 JSFiddle

您也可以参考此文档AngularJS orderBy