角度控制器 - $ filter sortBy integer

时间:2016-11-29 16:35:49

标签: angularjs filter

我的数据正在按字符串排序:

ID          Name
1122162089  John McGill
1461        Cynthia Salazar
22925       Sylvan Knutsen
24930       Amrit Advani

我需要将其排序为数字

var sortedData = function (records,optionsData) {
    var sortField = optionsData.sort[0].field;
    var sortDir = optionsData.sort[0].dir !== "asc";
    var tempRecords = $filter('orderBy')(records, sortField, sortDir);

    return tempRecords;
}

,其中

sortField = "ID" and sortDir = "asc"

尚未弄清楚如何在控制器中编写自定义过滤条件

奇怪的是,ID在数据中是数字的:

[{
    ID: 1122162089,
    Name: "John McGill"
},{
    ID: 1461,
    Name: "Cynthia Salazar"
}]

2 个答案:

答案 0 :(得分:1)

您的数据最有可能被排序为字符串,因为ID是一个字符串。您可以将自定义比较器添加到$ filter以处理字符串ID。您还可以通过将orderByFilter注入控制器来访问orderBy过滤器,如下所示:

.controller('MyCtrl', ['$scope', 'orderByFilter', function($scope, orderBy) 

然后你可以像这样使用orderByFilter来使用自定义比较器对数据进行排序:

var sortedData = function(records, optionsData) {
    var sortField = optionsData.sort[0].field;
    var sortDir = optionsData.sort[0].dir !== "asc";

    var tempRecords = orderBy(records, sortField, sortDir, function(val1, val2) {
        var v1 = parseInt(val1.value);
        var v2 = parseInt(val2.value);

        if (v1 === v2) {
            return 0;
        } else {
            return v1 < v2 ? -1 : 1;
        }
    });

    return tempRecords;
};

答案 1 :(得分:-1)

在我的情况下,我在表中使用orderBy,看看这个例子。你必须把元素放在你想要订购的&#34;表达&#34;和&#34;反向&#34;数据将如何显示,升序或递减,其中true表示递减,false表示递增。

<tr ng-repeat="obj in usuarios | orderBy : expression : reverse">

</tr>

如果字符串保持问题,请尝试使用parseInt()。