ngInfiniteScroll是angular的一个扩展指令,它能够实现页面的无限滚动加载功能,
要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现。步骤如下:
1. 下载ng-infinite-scroll.js程序http://sroze.github.io/ngInfiniteScroll/ 目前版本是1.0.0
2. 如果你是用的jQuery2.0以上版本,还需要修改ng-infinite-scroll.js程序,将所有的将所有的$window.xxx改为$(window).xxx, elem.xxx改为$(elem).xxx
3. 在HTML中引入script
<script type='text/javascript' src='path/to/jquery.min.js'></script>
<script type='text/javascript' src='path/to/angular.min.js'></script>
<script type='text/javascript' src='path/to/ng-infinite-scroll.min.js'></script>
4. HTML示例代码如下:
<div ng-controller='PostListController'>
<div infinite-scroll='demo.nextPage()' infinite-scroll-disabled='demo.busy' infinite-scroll-distance='1'>
<div ng-repeat='item in demo.items'>
<p>
<input type="hidden" value="{{item.PostId}}" />
<label>{{item.WriterName}}</label>
<label>{{item.WriterMail}}</label>
<label>{{item.WreckerName}}</label>
<label>{{item.StartDate}}</label>
<label>{{item.Location}}</label>
<label>{{item.Story}}</label>
</p>
</div>
<div ng-show='demo.busy'>Loading data...</div>
</div>
</div>
5. PostListController.js代码如下:
var ftitAppModule = angular.module('ftitApp', ['infinite-scroll']);
ftitAppModule.controller('PostListController',
function ($scope, Demo) {
$scope.demo = new Demo();
});
// 创建后台数据交互工厂
ftitAppModule.factory('Demo', function ($http) {
var Demo = function () {
this.items = [];
this.busy = false;
this.after = '';
this.page = 0;
};
Demo.prototype.nextPage = function () {
if (this.busy) return;
this.busy = true;
var url = "http://192.168.3.95:7002/api/post/nextpage?id=" + this.page + "&callback=JSON_CALLBACK";
$http.jsonp(url).success(function (data) {
var items = data;
for (var i = 0; i < items.length; i++) {
this.items.push(items[i]);
}
this.after = "t3_" + this.items[this.items.length - 1].id;
this.busy = false;
this.page += 1;
}.bind(this));
};
return Demo;
});
这样就实现了页面拖动到底后,从服务器自动加载数据的功能。
三、指令解释:
-
infinite-scroll:
是主要加载数据用的,也就是说,当你下拉到底部的时候就会触发这个方法去加载数据。 -
infinite-scroll-disabled:
这个值默认是false(Boolean类型), 默认关闭 “停止滚动” 这个功能.
当值为true的时候,infinite-scroll=”vm.nextPage()”中的vm.nextPage()方法将不会被调用。
翻页到底部的时候需要给一个 infinite-scroll-disabled=’{{scroll_switch}}’ 变量改变 disable的值。 -
infinite-scroll-distance:
这个值意思大致就是间隔多少页,比如说:如果该值为“0”的话,那么,当页面滚动到底部的时候才开始去加载数据。
如果该值为“1”的话,那么,当页面滚动到离底部还剩“1”页的时候,它就会去加载了。当然第一次访问页面的时候(还没开始滚动内容),它会先加载两页内容。
-
注:本文是转载一博友的文章,感觉对自己有所帮助就留下来了