angularJS插件:ngInfiniteScroll无限滚动加载数据(自动分页)
[ 2017/06/22, AngularJS , 7373阅, 0评 ]

无限滚动(Infinite Scroll)也称为自动分页、滚动分页和无限分页。常用在图片、文章或其它列表形式的网页中,用来在滚动网页到页面底部的时候自动加载下一页的内容。

这种形式最早由twitter使用,后来必应图片搜索、谷歌图片搜索、google reader等纷纷采用了这一项技术,于是靠滚动浏览器滚动条来翻页的技术慢慢在互联网上遍站开花。该技术非常适合移动端的数据自动加载。

ngInfiniteScroll是用于AngularJS的无限滚动控件,特点是简单易用,是angularjs社区里应用最为广泛的”触底加载”控件。

官方网站 / GitHub / Demo / Documentation

栗子如下,先引入必备文件(注意加载顺序)

<script type="text/javascript" src="yourpath/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="yourpath/angular.min.js"></script>
<script type="text/javascript" src="yourpath/ng-infinite-scroll.min.js"></script>

1、注入到module

var myApp = angular.module('myApp', ['infinite-scroll'])

2、定义factory

myApp.factory('scrollLoadData', ['$http','common','$rootScope',
function($http,common,$rootScope){
	var myData = function(url){
		this.items = [];
		this.busy = false;
		this.after = 1;
		this.url = url;
	};
	myData.prototype.nextPage = function(){
		if(this.busy){
			return;
		}
		this.busy = true;
		var myurl = $rootScope.serverUrl+this.url+"?pageNum="+this.after;
		$http.get(myurl).success(function(res){
			if(res.data.list.length > 0){
				var items = res.data.list;
				for(var i = 0; i < items.length; i++){
					this.items.push(items[i]);
				}
				this.busy = false;
				this.after += 1;
				if(this.after > res.data.totalPage){
					this.busy = true;
				}
			}else{
				this.busy = true;
			}
		}.bind(this));
	};
	return myData;
}]);

3、controller中

myApp.controller("myController",['$scope','scrollLoadData',function($scope,scrollLoadData){
	$scope.doMore = new scrollLoadData("aaa/list");
}])

4、template中

<div infinite-scroll="doMore.nextPage()" infinite-scroll-disabled="doMore.busy" infinite-scroll-distance="0">
  <dl ng-repeat="x in doMore.items">
    <dt>{{x.title}}<span>{{x.time | limitTo:10}}</span></dt>
    <dd>{{x.content}}</dd>
  </dl>
</div>
<div ng-if="doMore.busy">加载中...</div>

5、错误写法

<div ng-repeat="x in doMore.items" infinite-scroll="doMore.nextPage()">

ng-repeat和infinite-scroll不能放在同一个标签下。

有朋自远方来...评论一下呗O(∩_∩)O