javascript - infinite scroll from remote server with angular

573

I am working on an ionic angular project. There's a section where I'm implementing infinite scroll, and when I scroll to the bottom I see the data showing up.

What I've realized is the data somehow pre-populates and hides, waiting to come up when the user reaches the bottom of the page. Because no call is made to the server to load the other feeds, I'm displaying 5 records at a time.

From the php script, I've converted to a json. I have 60 rows, and from the chrome console I read the json length to be 60, meaning all the 60 rows are loaded up were the data is pre-populated already.

Is there a way I can show 5 records at a time and then when the user scrolls to the bottom it passes the last id, so a call would be made to the server to load the feeds?

JS:

.controller('feedsctrl',['$scope','$http',function($scope,$http){
$http.get('http://usefulsite.com/app/feeds.php').success(function(data){
       $scope.feeds= console.log(data); ;
       $scope.feeds=data;

       $scope.numberOfItemsToDisplay = 5; // Use it with limit to in ng-repeat
$scope.addMoreItem = function(done) {
    if ($scope.feeds.length > $scope.numberOfItemsToDisplay)
        $scope.numberOfItemsToDisplay += 5; // load number of more items
        $scope.$broadcast('scroll.infiniteScrollComplete')
});   

php

SELECT * FROM users order by fname asc

HTML

<ion-content overflow-scroll="false" has-bouncing="true">

    <div ng-controller="feedsctrl" ng-repeat="item in feeds | filter:scheduleSearch | limitTo:numberOfItemsToDisplay">

      <div >
        <img src="http://usefulsite.com/resize_image/images.php?image={{item.profile_pix}}&new_width=100&new_height=100">
        <h2><a href="#/tab/source/{{item.profile_id}}">{{item.fname}}&nbsp;{{item.lname}}</a></h2>
        <p>November 05, 1955</p>
      </div>

      <div >
        <img src="http://usefulsite.com/aoo/resize_image/images.php?image={{item.pic}}&new_width=800&new_height=800">
<p>{{item.fname}} {{item.lname}}</p>
      </div>

    </div>


    <ion-infinite-scroll

        on-infinite="addMoreItem()"
        distance="1%"
        ng-if="feeds.length > numberOfItemsToDisplay">
    </ion-infinite-scroll>
247

Answer

Solution:

If you have the entire data at client side than you can use the angular pagination directive for a better performing experience.

Try like this.

var app = angular.module('plunker', []).controller('pagedController', function($scope) {

   $scope.numPerPage = 5;
   $scope.data = [];
  
$scope.items = [];
for (i=1;i<=60;i++) {
  $scope.items.push({ text:'item '+i});
}


  $scope.getMoreData = function () {
  $scope.data = $scope.items.slice(0, $scope.data.length + $scope.numPerPage);
  };
  
  $scope.getMoreData();
  
});

app.directive('infiniteScroll', function() {
return function(scope, elm, attr) {
    var raw = elm[0];
    
    elm.on('scroll', function() {
        if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
            scope.$apply(attr.infiniteScroll);
        }
    });
};
});
 .itemContainer
 {
width: 150px;
height: 130px; 
border: thin solid black;
overflow-x: hidden;
overflow-y: scroll;
 }


 .item
 {
            
background: #f9f9f9;
font-family: verdana;
margin: 7px;
width : 110px;
  }
<!DOCTYPE html>
<html ng-app="plunker">

 <head>
<link rel="stylesheet" href="style.css" />
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js"></script>
<script src="script.js"></script>
 </head>
 
 <body ng-controller="pagedController">
<h1>Infinite scroll</h1>
<h4>{{items.length}} items</h4>
<div infinite-scroll="getMoreData()">
<ul>
 <li ng-repeat="item in data" >{{item.text}}</li>
</ul>
</div>

 </body>

</html>



People are also looking for solutions of the problem: deprecated: directive 'allow_url_include' is deprecated in unknown on line 0
Source

Share


Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.


Similar questions

Find the answer in similar questions on our website.

912 javascript - infinite scroll from remote server with angular
640 wampserver - PHP mail() on localhost with Comcast's SMTP Server not working
678 javascript - 500 (Internal Server Error) in my AJAX POST
48 mysql - Copy all information from one table and insert it into another table on different server using PHP
36 php - Javascript error receiving data from JSON echo
847 javascript - UPDATE database after approval from admin
318 php - Using functions from external JavaScript libraries in Moodle plugins
862 php - Some Changes from Mysql to Mysqli
12 javascript - Jquery ajax syntaxerror json.parse unexpected character at line 1 column 1 of the json data
939 php - Match multiple columns from a form

People are also looking for solutions to the problem: php, mysql single query for multipe columns distinct values

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.