Angular + Datatables不会对数字进行排序

时间:2017-02-03 11:37:57

标签: angularjs sorting datatables

我有一个数据表显示2人之间的数字连接。其中一些没有任何连接,因此可能有一个字符串“x”作为某些单元格的值。

我得到的问题是排序。如果按列排序,数字只按第一个数字排序,而不是按点前面的部分排序。

我将点设置为十进制分隔符,如下所示:

    var lang = {
        "decimal":        ".",
        "emptyTable":     "No data available in table",
        "info":           "Showing _START_ to _END_ of _TOTAL_ entries",
        "infoEmpty":      "Showing 0 to 0 of 0 entries",
        "infoFiltered":   "(filtered from _MAX_ total entries)",
        "infoPostFix":    "",
        "thousands":      "",
        "lengthMenu":     "Show _MENU_ entries",
        "loadingRecords": "Loading...",
        "processing":     "Processing...",
        "search":         "Search:",
        "zeroRecords":    "No matching records found",
        "paginate": {
            "first":      "First",
            "last":       "Last",
            "next":       "Next",
            "previous":   "Previous"
        },
        "aria": {
            "sortAscending":  ": activate to sort column ascending",
            "sortDescending": ": activate to sort column descending"
        }
    };

    $scope.dtOptions = DTOptionsBuilder.newOptions()
        .withDOM('frtip')
        .withOption('language', lang)
        .withButtons([
            {
                extend: 'csv',
                text: 'Download as CSV'
            },
            {
                extend: 'excel',
                text: 'Download as XLS'
            }
        ]);

以下是从控制台输出中获取的数据的摘录:

datatable

再次是一个截图,用于解释错误的排序:

wrong sorting

此处表格按列leonard排序,您可以看到这是按第一个数字排序的。但它应该是:94.36,66.39,9.96,7.31,......

任何想法我可能会出错?

1 个答案:

答案 0 :(得分:0)

内置类型检测效果很好。但是,如果任何与假定类型冲突,则该列将变为默认的alpha排序。您可以拥有一行完美的有效日期,但如果最后一行包含空值或x,则最终会进行字母排序。您可以通过在num部分中强制columnDefs数据类型来解决此问题:

$scope.dtColumnDefs = [
   { targets: 0, type: 'num' } //0 is the column index
];

不知道你的标记,但它会像

<table datatable="" dt-options="dtOptions" dt-column-defs="dtColumnDefs">

现在数字应该正确排序