javascript - Angular 工厂: Implementing getAll function to consume REST Api

标签 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]);
            }
        }

然后我从 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/

相关文章:

javascript - 从按钮运行函数

javascript - moment.js 和 moment-timezone-with-data.js 给出错误 Unknown Provider - Moment Provider

javascript - 如何测试 Angular Directive(指令)范围

javascript - Stripe 形式不创建 token

javascript - Bootstrap 3 : Dynamically re-size a panel and keep panel footer on bottom

javascript - 长度不读的 JQuery 密码验证?

javascript - 直接在play商店中打开安装页面

javascript - 从左向右滚动

javascript - 如何在我的指令中获取参数

javascript - 在 Angular 2 中使用 routerLinkeActive 时出现未定义的根错误