UI Grid 获取带分页的排序项目 [英] UI Grid get sorted items with pagination

查看:16
本文介绍了UI Grid 获取带分页的排序项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我检查了所有与 ui-grid 相关的 stackoverflow 帖子 排序 没有任何成功,所以我再提出一个问题.

SHORT :需要一种方法来按照当前的排序条件获取已排序的行.

我的问题是我有一个带分页的 UI Grid 实例,在使用 $mdDialog 模态添加它后,我无法获取排序数据.它显示在表格中的正确位置,但在后面,在所有存储它的对象中,新元素位于最后一个位置.

我使用一项服务调用 ui-grid 实例以将所有内容保存在一个地方:

//初始化 ui-grid 实例的默认服务app.serivce('testService', function(){var defaultGridOptions = {启用列菜单:假,enablePaginationControls: 真,分页PageSizes: [5],多重排序:假,treeRowHeaderAlwaysVisible: false,分页页面大小:5,enableHorizo​​ntalScrollbar: uiGridConstants.scrollbars.NEVER,enableVerticalScrollbar: uiGridConstants.scrollbars.NEVER};//每列排序规则//来自 columnsOrder 的位置 0 对来自 columnDefs 的位置 0 进行排序,依此类推var defaultColSort = [{排序:{方向:uiGridConstants.ASC,优先级:0}}];this.createGridOptions = 函数(gridData、columnDefs、gridOpts){gridOpts = typeof gridOpts !== 'undefined' ?网格选项:{};var gridOptions = angular.extend({}, defaultGridOptions, gridOpts);for(var i = 0; i < defaultColSort.length; i++)columnDefs[i] = angular.extend({}, defaultColSort[i], columnDefs[i]);gridOptions.data = gridData;gridOptions.columnDefs = columnDefs;返回网格选项;};//应该移动到所需页面的方法this.jumpToGridItem = function(api, entry) {无功 idx = -1;无功页= 0;var sortedData = null;//需要一种方法在这里获取排序数据//idx = sortedData.indexOf(entry);->检查新添加项的位置如果(idx == -1)返回假;//计算元素所在的页面page = Math.ceil(idx/api.grid.options.paginationPageSize);//跳转到页面api.pagination.seek(page);};})

这是我的控制器:

app.controller('testController', ['$scope', '$mdDialog', 'testService', function($scope, $mdDialog, testService){var columnDefs = [{字段:'标识符',名称:'标识符'}];var dummyData = [{ identifier: "Item" }, { identifier: 'Item 1' }, { identifier: "Item 2" }, { identifier: "Item 3" }];var gridOptions = $scope.gridOptions = testService.createGridOptions(dummyData, columnDefs);gridOptions.onRegisterApi = 函数(gridApi){$scope.gridApi = gridApi;};$scope.add = 函数 () {$mdDialog.show({控制器:函数($mdDialog){var 数据 = $scope.identifierVal;$mdDialog.hide(data);},templateUrl: 'add.html',父级:angular.element(document.body)}).then(函数(入口){//模态隐藏时接收到的数据$scope.gridOptions.data.push(entry);testService.jumpToGridItem($scope.gridApi, entry);});};}]);

现在我用 push() 附加数据,我认为这可能是原因之一.

我必须更新的方法是 jumpToGridItem,它实际上应该关注添加项目的页面.

谢谢

PS:很抱歉没有发布plnkr,如果需要,我稍后会做.

解决方案

我终于找到了一种方法来实现我最初想要的.我在发布问题一天后找到了它,但我很忙,无法发布答案.下面的代码也可以在 plnkr 中找到.它查找某个条目并转到可以找到它的页面.

我希望通过对话框(模态形式)将动态添加的条目集中在 ui-grid 表中:

控制器:

var app = angular.module('stefanz', ['ui.grid', 'ui.grid.pagination']);app.controller('MyCtrl', ['$scope', 'UIGridCustom', '$http', function($scope, UIGridCustom, $http){//从ui-grid demos复制的部分数据var data = [{"name": "Ethel Price", "gender": "female", "company": "Enersol" },{"name": "Claudine Neal", "gender": "female", "company": "Sealoud" },{"name": "Beryl Rice", "gender": "female", "company": "Velity" },{"name": "Wilder Gonzales", "gender": "男",公司":极客"},{姓名":乔治娜·舒尔茨",性别":女",公司":Suretech"},{姓名":卡罗尔·布坎南",性别":男性",公司":Ecosys"},{名称":瓦拉丽·阿特金森",性别":女性",公司":Hopeli"},{名称":施罗德"Mathews", "gender": "male", "company": "Polarium" },{"name": "Lynda Mendoza", "gender": "female", "company": "Dogspa" },{"name": "Sarah Massey", "gender": "female", "company": "Bisba" },{"name": "Robles Boyle", "gender": "male", "company": "Comtract" },{"name": "Evans Hickman", "gender": "male", "company": "Parleynet" },{"name": "Dawson Barber", "gender": "male", "company":迪米"}];var colDefs = [{标签:姓名",姓名:姓名"}, {标签:性别",名称:性别"}, {标签:公司",名称:公司"}];//为init调用服务var gridOptions = $scope.gridOptions = UIGridCustom.createGridOptions(data, colDefs);gridOptions.onRegisterApi = 函数(api){$scope.gridApi = api;}$scope.getItemPage = 函数(名称){UIGridCustom.jumpToGridItem($scope.gridApi, name);}}]);app.service('UIGridCustom', ['uiGridConstants', 'utils', function(uiGridConstants, utils){var defaultGridOptions = {启用列菜单:假,enableHorizo​​ntalScrollbar: uiGridConstants.scrollbars.NEVER,enableVerticalScrollbar: uiGridConstants.scrollbars.NEVER,enablePaginationControls: 假,分页页面大小:5,多重排序:真};//每列排序规则//来自 columnsOrder 的位置 0 对来自 columnDefs 的位置 0 进行排序,依此类推//可以覆盖到 columnDefs//文档:http://ui-grid.info/docs/#/api/ui.grid.class:GridOptionsvar defaultColSort = [];//第一列默认排序默认颜色排序[{排序:{方向:uiGridConstants.ASC,优先级:0}}];//用于对第二列进行排序//defaultColSort[1] = {//排序:{ 方向:uiGridConstants.ASC,优先级:0 }//};this.createGridOptions = 函数(gridData、columnDefs、stefanzGridOpts){//使用网格的自定义传递选项覆盖默认值var stefanzGridOpts = typeof stefanzGridOpts !== 'undefined' ?stefanzGridOpts:{};var gridOptions = angular.extend({}, defaultGridOptions, stefanzGridOpts);//强制按照默认/自定义列排序进行排序for(var i = 0; i < defaultColSort.length; i++)columnDefs[i] = angular.extend({}, defaultColSort[i], columnDefs[i]);//网格初始化gridOptions.data = gridData;gridOptions.columnDefs = columnDefs;返回网格选项;};this.jumpToGridItem = function(api, name) {无功 idx = 0;无功页= 0;var sort = prepareCriteria(api.grid.getColumnSorting());var data = dataObjectSort(prepareRows(api.grid.rows), 排序);entry = getEntryByName(data, name);idx = data.indexOf(entry) + 1;如果(!idx)返回假;//计算元素所在的页面page = Math.ceil(idx/api.grid.options.paginationPageSize);警报(名称 + '在页面 ' + 页面上找到);//跳转到页面api.pagination.seek(page);};//获取行的实体并放入一个新数组作为顶级项//有助于进一步的数据处理var prepareRows = 函数(行){if (rows.length == 0)返回假;var PreparedRows = [];行.forEach(功能(行){//不需要处理不在当前过滤器中的行(隐藏)if (row.visible == false)返回真;PreparedRows.push(row.entity);});返回preparedRows;};//我们正在比较整个输入并作为参数发送一个名称var getEntryByName = 函数(数据,搜索名称){for(var i = 0; i < data.length; i++) {if (data[i]['name'] == searchedName)返回数据[i];}返回假;}var dataObjectSort = 函数(数据,条件){返回 data.sort(utils.dynamicSortMultiple(criteria));};var prepareCriteria = function(colSorting) {var 排序 = [];var 字段 = [];//取只需要的字段colSorting.forEach(函数(列){排序.push({字段:column.field,方向:column.sort.direction,优先级:column.sort.priority})});//按优先级对标准进行排序 - UI 网格的工作方式如下//原因:http://ui-grid.info/docs/#/api/ui.grid.class:GridOptions.columnDef#properties_sort排序.排序(功能(a,b){如果 (a.priority  b.priority) 返回 1;否则返回0;});//准备用于排序的字段sort.forEach(函数(排序){//动态排序(上)需要-"号表示下降方向如果(sort.direction != uiGridConstants.ASC)sort.field = '-' + sort.field;字段.推(排序.字段);});返回字段;};}]);//将 utils 方法保存在一个单独的服务中//这里会出现所有排序方法app.service('utils', function(){函数 getJsonValue(obj, path) {if (!path || path == '')返回对象;path = path.split('.');var len = path.length;for (var i = 0; i < len - 1; i++) {var prop = path[i].split(/\[([^\]]+)]/);//指示[4] =>[指示,4];指示 =>[表示]如果(prop.length == 1){obj = obj[prop[0]];} 别的 {obj = obj[prop[0]][prop[1]];}}var prop = path[len - 1].split(/\[([^\]]+)]/);//指示[4] =>[指示,4];指示 =>[表示]如果(prop.length == 1){返回 obj[prop[0]];} 别的 {如果(prop.length == 2){返回 obj[prop[0]][prop[1]];} 别的 {if(prop.length ==3) {返回 obj[prop[0]][prop[1]];//这是一个黑客!} 别的 {返回 obj[prop[0]][prop[1]][prop[3]];//这是一个黑客!}}}};//http://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript/4760279#4760279函数动态排序(属性){var sortOrder = 1;if(property[0] === "-") {排序顺序 = -1;property = property.substr(1);}返回函数(a,b){var aInsensitive = getJsonValue(a, property).toLowerCase();var bInsensitive = getJsonValue(b, property).toLowerCase();var 结果 = (aInsensitive < bInsensitive) ?-1 : (aInsensitive > bInsensitive) ?1:0;返回结果 * sortOrder;}};函数 dynamicSortMultiple(props) {返回函数 (obj1, obj2) {var i = 0, result = 0, numberOfProperties = props.length;while(result === 0 && i < numberOfProperties) {结果 = dynamicSort(props[i])(obj1, obj2);我++;}返回结果;}};返回 {getJsonValue:函数(对象,路径){返回 getJsonValue(obj, path);},动态排序:函数(属性){返回动态排序(属性);},dynamicSortMultiple:函数(道具){返回 dynamicSortMultiple(props);}}});

HTML

<html ng-app="stefanz"><头><script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.min.js"></script><script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular-animate.min.js"></脚本><script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular-aria.min.js"></脚本><script data-require="jquery@*" data-semver="2.1.4" src="https://code.jquery.com/jquery-2.1.4.js"></script><link data-require="ui-grid@*" data-semver="3.0.7" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.css"/><script data-require="ui-grid@*" data-semver="3.0.7" src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.js"></script><script data-require="bootstrap@~3.3.5" data-semver="3.3.6" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script><link rel="stylesheet" href="style.css"/><script src="script.js"></script><body ng-controller="MyCtrl"><div ui-grid="gridOptions" ui-grid-pagination class="grid"></div><div class="centerAlignedText"><ul><li><a ng-click="getItemPage('Ethel Price')">获取 Ethel 价格</a></li><li><a ng-click="getItemPage('Schroeder Mathews')">获取 Schroeder Mathews</a></li><li><a ng-click="getItemPage('Dawson Barber')">获取道森理发师</a></li><li><a ng-click="getItemPage('Sarah Massey')">获取 Sarah Massey</a></li>

<div class="centerAlignedText" ng-if="gridOptions.totalItems > 0"><div class="paginationButtonsIcon boldText" style="width: 100px; display: inline-block;"><md-button ng-if="gridApi.pagination.getPage() > 1" class="paginationButtons" ng-click="gridApi.pagination.previousPage()" style="width: 90px;"><span class="notTransformedText boldText">上一个</span></md-button>

<div ng-repeat="n in gridApi.pagination.getTotalPages()" style="display: inline-block;"><md-button ng-if="(gridApi.pagination.getTotalPages() < 11)||(gridApi.pagination.getPage() <7 && n <10)||(n > gridApi.pagination.getPage() - 7 && n < gridApi.pagination.getPage() + 4)||(gridApi.pagination.getPage() > gridApi.pagination.getTotalPages() - 5 && n > gridApi.pagination.getTotalPages() - 11)" class="paginationButtons md-mini md-icon-button md-primary" ng-click="gridApi.pagination.seek($index + 1)"><span class="paginationButtonsIcon boldText" ng-if="gridApi.pagination.getPage() === $index + 1">{{$索引 + 1}}</span><span class="paginationButtonsIcon" ng-if="gridApi.pagination.getPage() !== $index + 1">{{$索引 + 1}}</span></md-button>

<div class="paginationButtonsIcon boldText" style="width: 100px; display: inline-block;"><md-button ng-if="gridApi.pagination.getPage() < gridApi.pagination.getTotalPages()" class="paginationButtons md-icon-button md-primary" ng-click="gridApi.pagination.nextPage()" style="width: 90px;"><span class="notTransformedText boldText">下一步</span></md-button>

</html>

I have checked all stackoverflow posts related to ui-grid sorted rows without any success so I am opening one more question.

SHORT : Need a way to get sorted rows following current sorting criteria.

My problem is that I have an instance of UI Grid with pagination and I can not get the sorted data after it was added using a $mdDialog modal. It is shown at the right position in the tabel, but behind, in all objects it is stored the new element is on the last position.

I call the ui-grid instance using a service to keep all stuff in one place:

// Default service for init a ui-grid instance
app.serivce('testService', function(){
  var defaultGridOptions = {
      enableColumnMenus: false,
      enablePaginationControls: true,
      paginationPageSizes: [5],
      multipleSorting: false,
      treeRowHeaderAlwaysVisible: false,
      paginationPageSize: 5,
      enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
      enableVerticalScrollbar: uiGridConstants.scrollbars.NEVER
  };

  // Each columns sort rule
  // Position 0 from columnsOrder sorts position 0 from columnDefs and so on
  var defaultColSort = [{
      sort: { direction: uiGridConstants.ASC, priority: 0 }
  }];

  this.createGridOptions = function (gridData, columnDefs, gridOpts) {
      gridOpts = typeof gridOpts !== 'undefined' ? gridOpts : {};
      var gridOptions = angular.extend({}, defaultGridOptions, gridOpts);

      for(var i = 0; i < defaultColSort.length; i++)
          columnDefs[i] = angular.extend({}, defaultColSort[i], columnDefs[i]);

      gridOptions.data = gridData;
      gridOptions.columnDefs = columnDefs;
      return gridOptions;
  };


  // The metod that should move to the desired page
  this.jumpToGridItem = function(api, entry) {
      var idx = -1;
      var page = 0;
      var sortedData = null;

      // NEED A WAY TO GET SORTED DATA HERE 
      //idx = sortedData.indexOf(entry); -> checks the position of the new added item

      if (idx == -1)
          return false;

      // Calculate the page where the element exists
      page = Math.ceil(idx/api.grid.options.paginationPageSize);

      // Jump to page
      api.pagination.seek(page);
  };
})

Here is my controller :

app.controller('testController', ['$scope', '$mdDialog', 'testService', function($scope, $mdDialog, testService){
  var columnDefs = [
      {
          field: 'identifier',
          name: 'Identifier'
      }
  ];

  var dummyData = [{ identifier: "Item" }, { identifier: 'Item 1' }, { identifier: "Item 2" }, { identifier: "Item 3" }];

  var gridOptions = $scope.gridOptions = testService.createGridOptions(dummyData, columnDefs);

  gridOptions.onRegisterApi = function (gridApi) {
      $scope.gridApi = gridApi;
  };

  $scope.add = function () {
      $mdDialog.show({
          controller: function($mdDialog) {
            var data = $scope.identifierVal;
            $mdDialog.hide(data);
          },
          templateUrl: 'add.html',
          parent: angular.element(document.body)
      }).then(function (entry) {
          // Data received when the modal is hidden
          $scope.gridOptions.data.push(entry);
          testService.jumpToGridItem($scope.gridApi, entry);
      });
  };

}]);

Right now I am appending the data with push(), this could be one reason, I think.

The method I have to update is jumpToGridItem, which actually should focus the page where the item was added.

Thank you

PS : Sorry for not posting a plnkr, I will do bit later if it is needed.

解决方案

I finally found a way to achieve what I initially wanted. I ve found it a day after posting the question but I was busy enough to post the answer. The code below can be also found in a plnkr. It looks for a certain entry and goes to the page where it can be found.

I wanted this to focus a dynamically added entry in a ui-grid table from a dialog (modal form):

Controller :

var app = angular.module('stefanz', ['ui.grid', 'ui.grid.pagination']);

app.controller('MyCtrl', ['$scope', 'UIGridCustom', '$http', function($scope, UIGridCustom, $http){
  // A part of data copied from ui-grid demos 
  var data = [{"name": "Ethel Price", "gender": "female", "company": "Enersol" },{"name": "Claudine Neal", "gender": "female", "company": "Sealoud" },{"name": "Beryl Rice", "gender": "female", "company": "Velity" },{"name": "Wilder Gonzales", "gender": "male", "company": "Geekko" },{"name": "Georgina Schultz", "gender": "female", "company": "Suretech" },{"name": "Carroll Buchanan", "gender": "male", "company": "Ecosys" },{"name": "Valarie Atkinson", "gender": "female", "company": "Hopeli" },{"name": "Schroeder Mathews", "gender": "male", "company": "Polarium" },{"name": "Lynda Mendoza", "gender": "female", "company": "Dogspa" },{"name": "Sarah Massey", "gender": "female", "company": "Bisba" },{"name": "Robles Boyle", "gender": "male", "company": "Comtract" },{"name": "Evans Hickman", "gender": "male", "company": "Parleynet" },{"name": "Dawson Barber", "gender": "male", "company": "Dymi" }];
  var colDefs = [{
    label: "name",
    name: "name"
  }, {
    label: "gender",
    name: "gender"
  }, {
    label: "company",
    name: "company"
  }];

  // Call the service for init
  var gridOptions = $scope.gridOptions = UIGridCustom.createGridOptions(data, colDefs); 

  gridOptions.onRegisterApi = function(api) {
    $scope.gridApi = api;
  }

  $scope.getItemPage = function(name) {
    UIGridCustom.jumpToGridItem($scope.gridApi, name); 
  }

}]);


app.service('UIGridCustom', ['uiGridConstants', 'utils', function(uiGridConstants, utils){
        var defaultGridOptions = {
            enableColumnMenus: false,
            enableHorizontalScrollbar: uiGridConstants.scrollbars.NEVER,
            enableVerticalScrollbar: uiGridConstants.scrollbars.NEVER,
            enablePaginationControls: false,
            paginationPageSize: 5,
            multipleSorting: true
        };

        // Each columns sort rule
        // Position 0 from columnsOrder sorts position 0 from columnDefs and so on
        // Could be overwritten into columnDefs
        // Docs : http://ui-grid.info/docs/#/api/ui.grid.class:GridOptions
        var defaultColSort = [];

        //1st column default sorting
        defaultColSort[{
            sort: { direction: uiGridConstants.ASC, priority: 0 }
        }];

        // For sorting 2nd column
        // defaultColSort[1] = {
        //     sort: { direction: uiGridConstants.ASC, priority: 0 }
        // };


        this.createGridOptions = function (gridData, columnDefs, stefanzGridOpts) {
            // Overwrite defaults with custom passed options for grid
            var stefanzGridOpts = typeof stefanzGridOpts !== 'undefined' ? stefanzGridOpts : {};
            var gridOptions = angular.extend({}, defaultGridOptions, stefanzGridOpts);

            // Force sorting following the default/custom column sort
            for(var i = 0; i < defaultColSort.length; i++)
                columnDefs[i] = angular.extend({}, defaultColSort[i], columnDefs[i]);

            // Grid init
            gridOptions.data = gridData;
            gridOptions.columnDefs = columnDefs;
            return gridOptions;
        };


        this.jumpToGridItem = function(api, name) {
            var idx = 0;
            var page = 0;

            var sorting = prepareCriteria(api.grid.getColumnSorting());
            var data = dataObjectSort(prepareRows(api.grid.rows), sorting);

            entry = getEntryByName(data, name);
            idx = data.indexOf(entry) + 1;

            if (!idx)
                return false;


            // Calculate the page where the element exists
            page = Math.ceil(idx/api.grid.options.paginationPageSize);

            alert(name + 'is found on page ' + page);
            // Jump to page
            api.pagination.seek(page);

        };

        // Takes the row's entity and put in a new array as a top-level item
        // Userful for further data handling 
        var prepareRows = function(rows) {
            if (rows.length == 0)
                return false;

            var preparedRows = [];
            rows.forEach(function(row){
                // Do not need to handle the rows that are not in current filter (hidden)
                if (row.visible == false)
                    return true;

                preparedRows.push(row.entity);
            });
            return preparedRows;
        };

        // We are comparing whole enter and as a parameter we are sending a name
        var getEntryByName = function(data, searchedName) {
          for(var i = 0; i < data.length; i++) {
            if (data[i]['name'] == searchedName)
              return data[i];
          }

          return false;
        }

        var dataObjectSort = function(data, criteria) {
            return data.sort(utils.dynamicSortMultiple(criteria));
        };

        var prepareCriteria = function(colSorting) {
            var sorting = [];
            var fields = [];

            // Take just needed fields
            colSorting.forEach(function(column){
                sorting.push({
                    field: column.field,
                    direction: column.sort.direction,
                    priority: column.sort.priority
                })
            });

            // Sort criterias by priority - UI grid works like this
            // Reason : http://ui-grid.info/docs/#/api/ui.grid.class:GridOptions.columnDef#properties_sort
            sorting.sort(function(a, b){
              if (a.priority < b.priority) return -1;
              else if (a.priority > b.priority) return 1;
              else return 0;
            });

            // Prepare fields for sorting 
            sorting.forEach(function(sort){
                // Dymanic sort (above) needs "-" sign for descendent direction
                if (sort.direction != uiGridConstants.ASC)
                    sort.field = '-' + sort.field;
                fields.push(sort.field);
            });

            return fields;
        };
}]);

// Keep utils methods into a separate service
// Here all sorting methods will appear
app.service('utils', function(){

    function getJsonValue(obj, path) {
        if (!path || path == '') 
            return obj;

        path = path.split('.');

        var len = path.length;
        for (var i = 0; i < len - 1; i++) {
            var prop = path[i].split(/\[([^\]]+)]/); // indication[4] => [indication, 4]; indication => [indication]

            if (prop.length == 1) {
                obj = obj[prop[0]];
            } else {
                obj = obj[prop[0]][prop[1]];
            }
        }

        var prop = path[len - 1].split(/\[([^\]]+)]/); // indication[4] => [indication, 4]; indication => [indication]
        if (prop.length == 1) {
            return obj[prop[0]];
        } else {
            if (prop.length == 2) {
                return obj[prop[0]][prop[1]];
            } else {
                if(prop.length ==3) {
                    return obj[prop[0]][prop[1]]; // this is a hack!
                } else {
                    return obj[prop[0]][prop[1]][prop[3]]; // this is a hack!
                }
            }
        }
    };

    //http://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript/4760279#4760279
    function dynamicSort(property) {
        var sortOrder = 1;
        if(property[0] === "-") {
            sortOrder = -1;
            property = property.substr(1);
        }
        return function (a,b) {
            var aInsensitive = getJsonValue(a, property).toLowerCase();
            var bInsensitive = getJsonValue(b, property).toLowerCase();
            var result = (aInsensitive < bInsensitive) ? -1 : (aInsensitive > bInsensitive) ? 1 : 0;
            return result * sortOrder;
        }
    };

    function dynamicSortMultiple(props) {
        return function (obj1, obj2) {
            var i = 0, result = 0, numberOfProperties = props.length;
            while(result === 0 && i < numberOfProperties) {
                result = dynamicSort(props[i])(obj1, obj2);
                i++;
            }
            return result;
        }
    };

    return {
        getJsonValue: function(obj, path) {
            return getJsonValue(obj, path);
        },
        dynamicSort: function(property) {
            return dynamicSort(property);
        },
        dynamicSortMultiple: function(props) {
            return dynamicSortMultiple(props);
        }
    }

});

HTML

<!DOCTYPE html>
<html ng-app="stefanz">

  <head>
    <script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.min.js"></script>
    <script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular-animate.min.js"></script>
    <script data-require="angularjs_1_3_15@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular-aria.min.js"></script>
    <script data-require="jquery@*" data-semver="2.1.4" src="https://code.jquery.com/jquery-2.1.4.js"></script>
    <link data-require="ui-grid@*" data-semver="3.0.7" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.css" />
    <script data-require="ui-grid@*" data-semver="3.0.7" src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-grid/3.0.7/ui-grid.js"></script>
    <script data-require="bootstrap@~3.3.5" data-semver="3.3.6" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body ng-controller="MyCtrl">
      <div ui-grid="gridOptions" ui-grid-pagination class="grid"></div>

      <div class="centerAlignedText">
        <ul>
          <li><a ng-click="getItemPage('Ethel Price')">Get Ethel Price</a></li>
          <li><a ng-click="getItemPage('Schroeder Mathews')">Get Schroeder Mathews</a></li>
          <li><a ng-click="getItemPage('Dawson Barber')">Get Dawson Barber</a></li>
          <li><a ng-click="getItemPage('Sarah Massey')">Get Sarah Massey</a></li>
        </ul>
      </div>


      <div class="centerAlignedText" ng-if="gridOptions.totalItems > 0">
          <div class="paginationButtonsIcon boldText" style="width: 100px; display: inline-block;">
              <md-button ng-if="gridApi.pagination.getPage() > 1" class="paginationButtons" ng-click="gridApi.pagination.previousPage()" style="width: 90px;">
                  <span class="notTransformedText boldText">Previous</span>
              </md-button>
          </div>
          <div ng-repeat="n in gridApi.pagination.getTotalPages()" style="display: inline-block;">
              <md-button ng-if="(gridApi.pagination.getTotalPages() < 11)
                                || (gridApi.pagination.getPage() < 7 && n < 10)
                                || (n > gridApi.pagination.getPage() - 7 && n < gridApi.pagination.getPage() + 4) 
                                || (gridApi.pagination.getPage() > gridApi.pagination.getTotalPages() - 5 && n > gridApi.pagination.getTotalPages() - 11)" class="paginationButtons md-mini md-icon-button md-primary" ng-click="gridApi.pagination.seek($index + 1)">
                  <span class="paginationButtonsIcon boldText" ng-if="gridApi.pagination.getPage() === $index + 1">
                      {{$index + 1}}
                  </span>
                  <span class="paginationButtonsIcon" ng-if="gridApi.pagination.getPage() !== $index + 1">
                      {{$index + 1}}
                  </span>
              </md-button>
          </div>
          <div class="paginationButtonsIcon boldText" style="width: 100px; display: inline-block;">
              <md-button ng-if="gridApi.pagination.getPage() < gridApi.pagination.getTotalPages()" class="paginationButtons md-icon-button md-primary" ng-click="gridApi.pagination.nextPage()" style="width: 90px;">
                  <span class="notTransformedText boldText">Next</span>
              </md-button>
          </div>
      </div>
  </body>

</html>

这篇关于UI Grid 获取带分页的排序项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆