Angular Factory:实现getAll函数以使用REST Api

时间:2015-02-21 14:46:25

标签: javascript angularjs

我有一个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);
    });

我有一些问题:

  • allSsls(以及控制器中的列表)似乎是emtpy,可能是这些变量的范围有些错误?
  • processListAll似乎通过第一页的数据集进行迭代,可能是回调的参数和给回调的参数是错误的 (this.list(i,this.processListAll(ssl));)

我是stackoverflow的新手,这是我的第一个问题。谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您在控制器内部使用Ssls.list()进行回调,无需从服务中返回$http承诺,但您的主要问题是您正在调用回调不正确。当您在服务中执行回调时,您不会将数据传递给它!这样做:

list:function (page, callback) {
      $http.get("/api/getSsls/" + page).success(function(data){
        callback(data);
      });
 }