如何使用角度js遍历api中存在的页码

时间:2017-06-23 20:44:40

标签: angularjs api

我正在从api访问数据。我在请求数据中将pageSize设置为100,因此会有多个页面返回数据。目前,我只收到最后一页的数据。有没有办法可以遍历页码并将所有数据存储在一起?

结果api看起来像这样: enter image description here

所以我想遍历& page = 1直到没有下一页存在。 我正在做$ http.get的方式是:

function userEventData (resp) {
            $http({
                method: "GET",
                url: resp.results["@href"]
            }).success(function (responseData) {
                logger.info("userEventData responseData", responseData);
                filterEventField(responseData);
                //return responseData;
            });
        }

感谢任何帮助。谢谢

2 个答案:

答案 0 :(得分:0)

看起来你正在直接从你的控制器调用$ http - 不管怎么说你不应该用角度来做这件事,你绝对不应该这样做。

相反,您将要调用获取所有数据的服务。你的控制器会做这样的事情。这需要GetData()返回一个promise。当这个承诺得到解决时,它会对数据做一些事情。

function userEventData (resp) {
    PagedDataService.GetData().then(function(data) {
        filterEventData(data)
    });
}

此版本的服务应该可以使用,但您需要填写代码以向“数据”添加信息并确定是否有其他页面。

请注意,$ http响应对象有几个属性可以让您确定http请求发生了什么。假设请求成功,r.data将包含API的实际响应。

app.factory("PagedDataService", ['$http', '$q', function($http, $q) {
   var data = [];
   var deferred;

   function GetPageRecursive(pageNumber) {
     var promise = $http.get('url', { page: pageNumber} ).then(function(r) {
        // add results to data here
        // also figure out if there's another page to get
        if(AnotherPage)
          GetPageRecursive(pageNumber ++)
        else
          deferred.resolve(data);
     })
     return promise;
   }

   return {
      GetData: function() {
        deferred = $q.defer();

        GetPageRecursive(1);

        return deferred.promise
      }

   }
}]);

答案 1 :(得分:-1)

您可以在成功阻止中执行操作。例如,您可以向数组添加新数据。或者触发另一个服务器调用以获取下一页数据。这将允许您按顺序获取数据。

或者,您可以使用for循环来触发100个http调用。那可能会很慢。也许您只想在需要时获取数据?也许基于一些用户操作,如滚动或按下按钮。