Javascript 用AngularJS处理数据库分页
我试图在控制器中使用“$http”服务从自定义API(flask with PostgresSQL数据库)获取所有数据,但API和数据库是通过分页构建的,这意味着如果我不想访问数据,则需要创建如下服务: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)
/*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是否有获取所有记录的调用?非常感谢!