我有一个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]);
}
}
然后我从控制器调用此工厂方法:
Ssls.list("1",function(data) {
var list = Ssls.listAll(data);
console.log("ALL:" + list);
});
我有一些问题:
我是stackoverflow的新手,这是我的第一个问题。谢谢您的帮助!
答案 0 :(得分:1)
您在控制器内部使用Ssls.list()
进行回调,无需从服务中返回$http
承诺,但您的主要问题是您正在调用回调不正确。当您在服务中执行回调时,您不会将数据传递给它!这样做:
list:function (page, callback) {
$http.get("/api/getSsls/" + page).success(function(data){
callback(data);
});
}