Javascript 用AngularJS处理数据库分页

Javascript 用AngularJS处理数据库分页,javascript,angularjs,pagination,Javascript,Angularjs,Pagination,我试图在控制器中使用“$http”服务从自定义API(flask with PostgresSQL数据库)获取所有数据,但API和数据库是通过分页构建的,这意味着如果我不想访问数据,则需要创建如下服务: /*FIRST PAGE*/ $http.get("/api/test", testData) .success(...) /*SECOND PAGE*/ $http.get("/api/test?page=2", testData)

我试图在控制器中使用“$http”服务从自定义API(flask with PostgresSQL数据库)获取所有数据,但API和数据库是通过分页构建的,这意味着如果我不想访问数据,则需要创建如下服务:

/*FIRST PAGE*/     
$http.get("/api/test", testData)
                .success(...)
/*SECOND PAGE*/
$http.get("/api/test?page=2", testData)
                .success(...)
function someController(getPagedData) {
  getPagedData(2).then(...); // will do GET /api/test?page=2
}
这显然不是一个好的解决方案,但它是有效的!那么你能指导我如何更好地处理这种情况吗?因为我知道这个api包含1000多页


干杯

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

/* 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
请求的第二个参数是config对象,它使您的服务更加简单

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

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

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

希望这有帮助

尝试创建一个服务,该服务使用承诺访问数据并按您想要的方式分离数据:

      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;
        }
    }
这在本手册中有详细说明

Angular的
$http
服务支持
config
param(第二个参数为
.get
),该参数支持
params
参数,并为您执行所有相关操作,包括正确编码等

参数–{Object.}
–字符串或对象的映射 将使用
paramSerializer
进行序列化,并作为GET追加 参数

所以你可以

  angular
    .module('xxx')
    .factory('getPagedData', function ($http) {
      return function(page) {
        return $http.get("/api/test", { params: { page: page } });
      }
    });
然后像这样使用它:

/*FIRST PAGE*/     
$http.get("/api/test", testData)
                .success(...)
/*SECOND PAGE*/
$http.get("/api/test?page=2", testData)
                .success(...)
function someController(getPagedData) {
  getPagedData(2).then(...); // will do GET /api/test?page=2
}

另请注意,
.success
方法是。它甚至在角1.6中被删除。使用
。然后改用

永远不要这样做。Angulars的
$http
服务支持
config
param(第二个参数是
.get
),它支持
params
参数,并为您进行所有的浓缩,包括正确的编码等。您应该将此作为答案提交,但如果我想知道我在整个数据集中有多少记录,该怎么办?我可以将所有GET中的数据连接到一个数组吗?这是一个“好的实践”解决方案吗?API是否有获取所有记录的调用?非常感谢!