基于AngularJS实现页面滚动到底自动加载数据的功能


Posted in Javascript onOctober 16, 2015

要实现这个功能,可以通过 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=''>
     <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 = ;
   };
   Demo.prototype.nextPage = function () {
     if (this.busy) return;
     this.busy = true;
     var url = "http://...:/api/post/nextpage?id=" + this.page + "&callback=JSON_CALLBACK";
     $http.jsonp(url).success(function (data) {
       var items = data;
       for (var i = ; i < items.length; i++) {
         this.items.push(items[i]);
       }
       this.after = "t_" + this.items[this.items.length - ].id;
       this.busy = false;
       this.page += ;
     }.bind(this));
   };
   return Demo;
 });

这样就实现了页面拖动到底后,从服务器自动加载数据的功能。

PS:AngularJS的加载执行过程

1. HTML页面的加载,这会触发加载页面包含的所有JS (包括 AngularJS)

2. AngularJS启动,搜寻所有的指令(directive)

3. 找到ng-app,搜寻其指定的模块(Module),并将其附加到ng-app所在的组件上。

4. AnguarJS遍历所有的子组件,查找指令和bind命令

5. 每次发现ng-controller或者ng-repeart的时候,它会创建一个作用域(scope),这个作用域就是组件的上下文。作用域指明了每个DOM组件对函数、变量的访问权。

6. AngularJS然后会添加对变量的监听器,并监控每个变量的当前值。一旦值发生变化,AngularJS会更新其在页面上的显示。

7. AngularJS优化了检查变量的算法,它只会在某些特殊的事件触发时,才会去检查数据的更新,而不是简单地在后台不停地轮询。

Javascript 相关文章推荐
js带前后翻页的图片切换效果代码分享
Sep 08 Javascript
JS实现日期时间动态显示的方法
Dec 07 Javascript
JS调用某段SQL语句的方法
Oct 20 Javascript
Vue.js中兄弟组件之间互相传值实例
Jun 01 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
微信小程序实现刷脸登录
May 25 Javascript
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
Mar 06 Javascript
详解Vue中使用Axios拦截器
Apr 22 Javascript
小程序自定义圆形进度条
Nov 17 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 #Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
Oct 16 #Javascript
javascript实现动态标签云
Oct 16 #Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 #Javascript
jquery实现简单实用的弹出层效果代码
Oct 15 #Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 #Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
Oct 15 #Javascript
You might like
php中eval函数的危害与正确禁用方法
2014/06/30 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
Javascript Global对象
2009/08/13 Javascript
JS 对象介绍
2010/01/20 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
基于substring()和substr()的使用以及区别(实例讲解)
2017/12/28 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
2020/07/16 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
护士实习求职信
2014/06/22 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
执法作风整顿剖析材料
2014/10/11 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
白鹤梁导游词
2015/02/06 职场文书
个人收入证明范本
2015/06/12 职场文书
军训决心书范文
2015/09/22 职场文书
Python 中的Sympy详细使用
2021/08/07 Python