当列具有布尔值和未定义值时,如何在ng-grid中自定义排序?

时间:2018-07-27 14:34:42

标签: angularjs ng-grid gridview-sorting

我指的是在ng-grid上提出的问题,但无法在此处找到满足我要求的解决方案。 我有ng-grid,其列名称称为Status。它显示来自JSON中2个不同参数的值,如下所示。

var mydata1 = [{"Id":01,"CustNo":"100001","CustName":"Alexander","LastSeen":null,"MultipleDatasets":false}, 
        {"Id":02,"CustNo":"100002","CustName":"Mike","LastSeen":"2017-10-15T00:00:00","MultipleDatasets":false}, 
            {"Id":03,"CustNo":"100003","CustName":"Anne","LastSeen":null,"MultipleDatasets":true}]

状态显示

  • 没有标志-当LastSeen为空
  • 黄旗-有日期时
  • 红旗-MultipleDatasets:true

在ASC的“状态”列中:我得到YellowFlag,No Flag和Red Flag 在DESC的“状态”列中:我没有标志,YellowFlag和红色标志。

我想拥有显示

的自定义排序功能

在ASC的“状态”列上:RedFlag,YellowFlag,无标志 在DESC的“状态”列中:“无标志”,“黄旗”和“红色标志”。

我应该如何为此编写一个排序函数?

var app = angular.module('myApp', ['ngGrid']);

app.controller('MyCtrl', function($scope) {

   $scope.data = [{"Id":01,"CustNo":"100001","CustName":"Alexander","LastSeen":null,"MultipleDatasets":false}, 
                    {"Id":02,"CustNo":"100002","CustName":"Mike","LastSeen":"2017-10-15T00:00:00","MultipleDatasets":false}, 
                        {"Id":03,"CustNo":"100003","CustName":"Anne","LastSeen":null,"MultipleDatasets":true}];

    $scope.gridOptions = {
        data: 'data',

        columnDefs: [
            {
                field: 'DataLastSeen', displayName: 'Status', width: 25, enableCellEdit: false, cellTemplate: $scope.cellWarning, 
                sortFn: function (DataLastSeen) {
                   console.log(row.entity.DataLastSeen);

                }
            },
          { field: 'CustNo', displayName: 'Customer Number'},
          { field: 'CustName', displayName: 'Customer Name'}

        ]
    };

     $scope.cellWarning = "<div>" +
        "<div ng-if=\"row.entity.MultipleDatasets\"><md-tooltip>Multiple datasets have been uploaded from this customer today.</md-tooltip><md-icon style='color: #FF2F00'>warning</md-icon></div>" +
        "<div ng-if=\"showWarning(row.entity.DataLastSeen)\"><md-tooltip>No data in the past day</md-tooltip><md-icon style='color: #FFCC00'>warning</md-icon></div>" +
        "</div>";

         $scope.showWarning = function (date) {

        if (date === undefined) {

            return                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ;
        }

        var dataLastSeen = new Date(date);
        var oneDayAgo = new Date();
        oneDayAgo.setDate(oneDayAgo.getDate() - 1);
        return dataLastSeen < oneDayAgo;
    }


});

0 个答案:

没有答案