使用AngularJS处理数据库中的分页

时间:2017-01-09 21:30:07

标签: javascript angularjs pagination

我正在尝试使用我的控制器中的'$ http'服务从自定义API(带有PostgresSQL数据库的烧瓶)获取所有数据但是api和数据库是使用分页构建的,这意味着如果我不想访问数据需要创建这样的服务:

/*FIRST PAGE*/     
$http.get("/api/test", testData)
                .success(...)
/*SECOND PAGE*/
$http.get("/api/test?page=2", testData)
                .success(...)

这显然不是很好的解决方案,但它有效!那么你能指导我如何更好地处理这种情况吗?因为我知道这个api包含超过一千页...

干杯!

4 个答案:

答案 0 :(得分:1)

这在official documentation

中有所描述

Angular的src="@Request.Url.GetLeftPart(UriPartial.Authority)~/images/screenshot.png" 服务支持$http param(config的第二个参数),它支持.get参数并使用适当的编码等进行所有连接你。

  

params - 字符串或对象的映射   将使用params – {Object.<string|Object>}序列化并附加为GET   参数。

所以你可以做到

paramSerializer

并像这样使用它:

  angular
    .module('xxx')
    .factory('getPagedData', function ($http) {
      return function(page) {
        return $http.get("/api/test", { params: { page: page } });
      }
    });

另请注意,function someController(getPagedData) { getPagedData(2).then(...); // will do GET /api/test?page=2 } 方法为deprecated。甚至在Angular 1.6中删除它。请改用.success

答案 1 :(得分:0)

虽然这似乎是一个合乎逻辑的解决方案......

/* SERVICE */
var baseUrl = "/api/test";

MyService.getTests = function(page, testData) {
  var pageParams = "";
  if (page > 1) {
    pageParams = "?page="+page;
  }
  return $http.get(baseUrl+pageParams, testData).success().error();
}

... GET请求不允许您发送任何数据。我不确定您打算如何将testData发送到$http.get请求。 GET请求的第二个参数是配置对象,它使您的服务更加简单。

var baseUrl = "/api/test";
MyService.getTests = function(page, testData) {
  return $http.get(baseUrl, {params: {page: page})  //becomes /api/test?page=1
  .success()
  .error();
}

答案 2 :(得分:0)

每次要分页到下一个数据集时,您只需传递一个变量即可。所以你会:

$http.get("/api/test?page="+ pageNum, testData).success(..)

希望这有帮助!

答案 3 :(得分:0)

尝试创建一个使用promises访问数据并按照您希望的方式分解数据的服务:

      function getTestData(testData) {

        return $http.get("/api/test", testData)
            .then(function(response){ //Promise is successful create an object to store the data
            }, handleError);

        function testError(response){//Handle any errors if the promise fails
            return response;
        }
    }