基于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 相关文章推荐
多个iframe自动调整大小的问题
Sep 18 Javascript
JQuery select标签操作代码段
May 16 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
Feb 05 Javascript
node.js中的url.format方法使用说明
Dec 10 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
jQuery表格插件datatables用法汇总
Mar 29 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
微信小程序request请求后台接口php的实例详解
Sep 20 Javascript
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
微信小程序实现提交input信息到后台的方法示例
Jan 19 Javascript
详解mpvue开发微信小程序基础知识
Sep 23 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 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
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
利用location.hash实现跨域iframe自适应
2010/05/04 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
业务部主管岗位职责
2014/01/29 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
公证书标准格式
2014/04/10 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
学校四群教育实施方案
2014/06/12 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2016春季小学开学寄语
2015/12/03 职场文书