我正在尝试使用我的控制器中的'$ http'服务从自定义API(带有PostgresSQL数据库的烧瓶)获取所有数据但是api和数据库是使用分页构建的,这意味着如果我不想访问数据需要创建这样的服务:
/*FIRST PAGE*/
$http.get("/api/test", testData)
.success(...)
/*SECOND PAGE*/
$http.get("/api/test?page=2", testData)
.success(...)
这显然不是很好的解决方案,但它有效!那么你能指导我如何更好地处理这种情况吗?因为我知道这个api包含超过一千页...
干杯!
答案 0 :(得分:1)
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;
}
}