javascript - 对 ng-grid 中的基础数据进行排序

标签 javascript angularjs sorting ng-grid

我希望在 ng-grid 单元格中显示格式化值,但对未显示的相关数值进行排序。

var myData1 = [{
 name: "Moroni",
  age: 50,
  ageWord: "Fifty"
}

在上面的示例中,我将显示 ageWord 列,但希望对 age 列进行排序。

docs用于对 ng-grid 指令进行排序表明我可以提供自定义函数来对基础数据进行排序:

sortFn

Sets the sort function for the column. Useful when you have data that is formatted in an unusual way or if you want to sort on an underlying data type. Check the MDN sort docs for examples

自定义排序函数在点击列排序时接收显示值,但我希望按年龄排序。如果我在排序函数中有可用的行,我可以对同级单元格进行排序,如下所示:

sortFn: function(a, b) {
    var ageA = a.getProperty('age');
    var ageB = b.getProperty('age');
    return ageA-ageB;
  }

对“ageWord”列排序后如何按“年龄”排序有什么建议吗?可用示例 on plnkr .

最佳答案

您需要将您的列定义为一个对象并定义您的cellTemplate。然后在 sortFn ( http://plnkr.co/edit/qmBsneZ3HmFRKSkjbBWU?p=preview ) 中使用 age 属性:

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

app.controller('MyCtrl', function($scope) {
    //Notice age is now an object to be used with the cellTemplate
    var myData1 = [{name: "Moroni", age: {age: 50, ageWord: "Fifty"}},
                     {name: "Tiancum", age: {age: 43, ageWord: "Forty-Three"}},
                     {name: "Mildred", age: {age: 70, ageWord: "Seventy"}},
                     {name: "Jacob", age: {age: 27, ageWord: "Twenty-Seven"}}];


    $scope.gridOptions = { 
      data: 'gridData',
       columnDefs: [
        {field: 'name', displayName: 'Name'}, 
        {field:'age', 
         displayName:'Age',
         cellTemplate: '<div class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text>{{COL_FIELD.ageWord}}</span></div>',
         sortFn: function (a, b) {
           //compare age property of the object
           if (a.age < b.age) {
             return -1;
           }
           else if (a.age > b.age) {
             return 1;
           }
           else {
             return 0;
           }
         }
       }]
    };

    $scope.gridData = myData1;

});

根据文档,cellTemplate 默认为:

<div class="ngCellText" ng-class="col.colIndex()"><span ng-cell-text>{{COL_FIELD CUSTOM_FILTERS}}</span></div>

因此,您需要做的就是使用 {{COL_FIELD.age}} 和您可能拥有(或不拥有)的任何自定义过滤器。

关于javascript - 对 ng-grid 中的基础数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20706684/

相关文章:

javascript - 获取 jQuery 中的顶部元素

javascript - Scope.attribute 可用但 scope.attribute.variable 在指令中未定义

javascript - 使用 Jasmine 在 Angular 中模拟 Modal 实例

AngularJS 1.0.7 routeParams 解析

excel - 按 MS Excel 中的列排序 - VBA

javascript - 我们可以判断用户是否取消了浏览器文件上传吗?

javascript - 使用函数将多个输入推送到单独的 div 中?

javascript - 根据多个值过滤数组

iphone - 使用自定义类的实例对数组进行排序

sorting - 排序链接列表