无限滚动重新加载页面,Ionic

时间:2016-08-03 04:19:13

标签: angularjs ionic-framework infinite-scroll

当我到达页面底部时,它会刷新并加载新数据,但它不会显示上一页和当前页面的数据。

例如它看起来像这样:

1
2
3
4
* end of page, refreshes page* 
5
6
7
8

我的控制器中的function

var i = 0;
$scope.result = [];    
$scope.noMoreItemsAvailable = false;

$scope.loadMore = function() {

 if (i < 4) {
   $http.get(url.recommended + i).success(function(response) {
     i++;
     $scope.result = $scope.result.push(response);
     console.log(response);

     $timeout(function() {
       $scope.result = response
     });

     $scope.$broadcast('scroll.infiniteScrollComplete');
   });
 } else {
   $scope.noMoreItemsAvailable = true;
 }
}

HTML:

<div class="item item-text-wrap" ng-click="post($event,res)" ng-repeat="res in result" ng-controller="recommendedJobsCtrl" ui-sref="tabs.jobDetails">
  <ul>    
    <li id="jobTitle">{{res.title }}</li>
  </ul>
</div>

<ion-infinite-scroll ng-if="!noMoreItemsAvailable" on-infinite="loadMore()" distance="1%"></ion-infinite-scroll>

2 个答案:

答案 0 :(得分:1)

嗯,有两个主要问题:

  1. 您为push归因array的值。你不应该这样做,你只需这样做:
  2. $scope.result.push(response);
    
    1. 您应该删除此timeout,因为它会覆盖您已有的内容:
    2. $timeout(function() {
        $scope.result = response
      });
      

      顺便说一句,我建议您创建factory以防止async数据出现问题。

      你可以这样做:

      angular
        .module('app', [])
        .controller("MainCtrl", MainCtrl)
        .factory("ItemsFactory", ItemsFactory);
      
      ItemsFactory.$inject = ['$http'];
      
      function ItemsFactory($http) {
        var factory = {
          getPages: getPages
        };
      
        return factory;
      
        function getPages(url) {
          return $http.get(url);
        }
      }
      

      然后,在controller

      MainCtrl.$inject = ['$scope', 'ItemsFactory'];
      
      function MainCtrl($scope, ItemsFactory) {
        var url = 'https://www.google.com';     
      
        function getResponse(response) {
          $scope.result.push(response.data);
        }
      
        function getError(response) {
          console.log(response);
        }
      
        ItemsFactory.getPages(url)
          .then(getResponse);
          .catch(getError);
      }
      

      注意:我还建议您更改从back-end检索商品的方式。这不是一个通过1检索元素1的好方法。在您的情况下,正确的是一次检索所有四个项目并在控制器中处理它们。

答案 1 :(得分:0)

$scope.result response导致responseresult覆盖。 只需将其删除即可将 $timeout(function () { $scope.result=response }); 附加到NSArray

删除此

if let ar = sender.draggingPasteboard().propertyListForType("ABLinkedPeopleUIDsPboardType") as? [[String]] { 
    // I'm assuming you're expecting to get back a two-dimensional array of Strings, or in the Obj-C realm, an NSArray of NSArrays of NSStrings
    let uniqueID = ar[0][0]
}
else {
    print("Property List for ABLinkedetc. is not a 2D String Array!")
}