How to add pagination in Restangular and Django Rest Framework?

Issue

In DRF I have added pagination limit to 100 'PAGINATE_BY': 100,
since Restangular expects results in array form, I had to use the below meta extractor function in my angular app module

var app = angular.module("myapp", ["restangular"].config(function(
            RestangularProvider){

  RestangularProvider.setResponseExtractor(function(response, operation, what, url) {
    if (operation === "getList") {
        var newResponse = response.results;
        newResponse._resultmeta = {
            "count": response.count,
            "next": response.next,
            "previous": response.previous
        };
        return newResponse;
    }

    return response;
    });
});

and my controller looks like

app.controller('DataCtrl',function($scope, Restangular){

    var resource = Restangular.all('myapp/api/dataendpoint/');
        resource.getList().then(function(data){
        $scope.records = data;
    });    
}

Meta info is not available in controller, how do I paginate if there are more than 100 records available?

Solution

I suppose you could simply call:

RestangularProvider.addResponseExtractor(function(data, operation, what, url, response) {
  if (operation === "getList") {
      data._resultmeta = {
          "count": response.count,
          "next": response.next,
          "previous": response.previous
      };
      return data;
  }

  return response;
});

and

var page = 2;
var resource = Restangular.all('myapp/api/dataendpoint/');
resource.getList({page: page}).then(function(data){
  console.log(data._resultmeta.next ? 'there is more pages' : 'You reach the end');
});

I’m not usual with Rectangular but Django Rest Framework support pagination from query parameter

Answered By – jsan

Answer Checked By – Clifford M. (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.