【问题标题】:AngularJS Ionicframework infinite scroll GET REQUEST a list 10 at a timeAngularJS Ionicframework无限滚动GET REQUEST一次列表10
【发布时间】:2015-06-27 04:36:56
【问题描述】:

我正在尝试使用 ionic 框架实现一个 ion-infinite-scroll,我有一个 REST API,允许我设置索引以获取请求范围.. 我的服务看起来像这样,其中 begin in end 是索引.

this.GetUserRatings = function (id, begin, end) {
            return $http.get($rootScope.endPoint + '/user/' + id + '/ratings/'+ begin + '/' + end);
        };  

当页面最初重新加载时,我希望列表中有 10 个项目,所以在我的控制器中它会像这样......

 UserService.GetUserRatings($stateParams.id, 1, 10)
        .success(function (data) {
          $scope.userRatings = angular.fromJson(data);
          }).error(function(error) {
                    //do something
        });

当我向下滚动列表时,我希望我的 ion-infinite-scroll 获得接下来的 10 个项目 (11 - 20) 和下一个 (21 - 30) 等等.. 那么我该怎么做呢?

$scope.loadMore = function() {

   // UserService.GetUserRatings($stateParams.id, ?, ?)
   // $scope.ratings.push({...}); I'm guessing this will be in the success 
   //also how to know if no more results
    $scope.$broadcast('scroll.infiniteScrollComplete'); 
  };

  $scope.ratings = [];

在视图中它是这样的..

 <ion-infinite-scroll ng-if="noMoreResults" on-infinite="loadMore()" distance="10%"></ion-infinite-scroll>

【问题讨论】:

    标签: javascript angularjs ionic-framework ionic infinite-scroll


    【解决方案1】:

    基本上,您正在更新$scope.userRatings,所以我会使用类似的内容:

    • 首先获取下一项

    • 然后将这些项目添加到您的列表中。请注意,我建议使用合并方法,但如果没有有关您的数据结构的更多信息,很难提出合适的建议。

    • 我不知道如何将 noMoreResults 设置为 true,但您可能知道何时实例化它;)

    .

     var _loopItems = 10;
     $scope.loadMore = function() {
       var _curLength = $scope.userRatings.length;
    
       UserService.GetUserRatings($stateParams.id, _curLength  , _curLength  + _loopItems ).success(function (data) {
          $scope.userRatings = angular.merge($scope.userRatings, angular.fromJson(data)); // AS I DON T KNOW YOUR DATAS, IT S HARD TO TELL HOW TO MERGE THOSE VALUES
          }).error(function(error) {
                    //do something
        });
    
        $scope.$broadcast('scroll.infiniteScrollComplete'); 
      };
    

    编辑:因为你的回答是这样的:

    [{id:1, userid:1, rating_num:5, rating_text:"foo"},{id:2, userid:2, rating_num:5, rating_text:"foo"}]
    

    我建议将合并更改为以下内容:

    data = angular.fromJson(data);
    for (var i =0; i< data.length; i++){
      $scope.userRatings.push(data[i]);
    }
    

    【讨论】:

    • 角度合并是否像 push 一样工作?.. 是否将新对象添加到数组 userRatings 数组的末尾.. 我明白你的逻辑,我的初始索引错误应该是 0 - 9。 .. 我有点想同样的事情(userRatings.length,userRatings.length + 10).. 但我在考虑 $scope.userRatings.push 的响应数据.. 推送与合并有何不同跨度>
    • 我不知道你的回复结构。我个人遍历我的回复并执行“array.push”,但没有关于您的回复结构的信息,很难告诉您该怎么做。
    • [{id:1, userid:1, rating_num:5, rating_text:"foo"'},{id:2, userid:2, rating_num:5, rating_text:"foo"'} ]
    • 如果您的服务未提供有关“总数”的信息,您可以根据您的服务的响应 204(空)进行假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多