我有一个 Angular.JS 工厂,可以从 REST Api 中提取信息。
REST Api 的调用方式为 /api/getSsls/1 其中 1 是页码。 API 返回一个 json 对象,其中包含前十个项目以及有关总共有多少页/项目的信息。
我想编写一个工厂方法,它从 api 获取所有项目并遍历 浏览所有页面。
这是我尝试过的:
app.factory('Ssls', function ($routeParams,$http) {
allSsls = [];
return {
list:
function (page, callback) {
return $http.get("/api/getSsls/" + page).success(callback);
},
listAll:
function (ssl, callback) {
var TotalPages = ssl.paging.TotalItems/ssl.paging.PageSize;
TotalPages = Math.ceil(TotalPages);
console.log("TOTAL Pages:" + TotalPages);
for(var i = 1; i < TotalPages; i++ ) {
this.list(i,this.processListAll(ssl));
// using this as callback above instead of processListAll(ssl) works and outputs all elements to the console
// function () {
// console.log(data.list[0]);
// });
};
},
processListAll:
function (data) {
for( var j = 0; j < data.list.length; j++){
console.log(data.list[j]);
allSsls.push(data.list[j]);
}
}
然后我从 Controller 调用这个工厂方法:
Ssls.list("1",function(data) {
var list = Ssls.listAll(data);
console.log("ALL:" + list);
});
我有一些问题:
- allSsls(以及 Controller 中的列表)似乎是空的,可能是这个变量的范围有问题?
- processListAll 似乎迭代了第一页的数据集,可能回调和给回调的参数有问题 ( this.list(i,this.processListAll(ssl));)
我是 stackoverflow 的新手,这是我的第一个问题。感谢您的帮助!
最佳答案
您在 Controller 内使用带有回调的 Ssls.list()
,无需从您的服务返回 $http
promise ,但是您的 main问题是您错误地调用了回调。当您在服务中执行回调时,您不会将数据传递给它!改为这样做:
list:function (page, callback) {
$http.get("/api/getSsls/" + page).success(function(data){
callback(data);
});
}
关于javascript - Angular 工厂: Implementing getAll function to consume REST Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28647067/