基于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 相关文章推荐
jquery select操作的日期联动实现代码
Dec 06 Javascript
情人节之礼 js项链效果
Feb 13 Javascript
js中cookie的添加、取值、删除示例代码
Oct 21 Javascript
JS获得选取checkbox整行数据的方法
Jan 28 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
Oct 25 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
Element Cascader 级联选择器的使用示例
Jul 27 Javascript
JavaScript实现拖动对话框效果的实现代码
Oct 12 Javascript
Nuxt 项目性能优化调研分析
Nov 07 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实现aes加密类分享
2014/02/16 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
如何理解transaction事务的概念
2015/05/27 面试题
2014年幼儿园元旦活动方案
2014/02/13 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2014司机年终工作总结
2014/12/05 职场文书
工人先锋号申报材料
2014/12/29 职场文书
高中社区服务活动报告
2015/02/05 职场文书
八年级语文教学反思
2016/03/03 职场文书