基于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框架veryide.librar源代码
Mar 05 Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
javascript 事件处理程序介绍
Jun 27 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
深入理解Angularjs中的$resource服务
Dec 31 Javascript
详解Angular 4.x Injector
May 04 Javascript
vue component组件使用方法详解
Jul 14 Javascript
深入理解vue-router之keep-alive
Aug 31 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
May 08 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
vue中实现弹出层动画效果的示例代码
Sep 25 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
php5中类的学习
2008/03/28 PHP
PHP教程 基本语法
2009/10/23 PHP
php生成验证码函数
2015/10/20 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
python 实现端口扫描工具
2020/12/18 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
护理专业的自荐信
2013/10/22 职场文书
思想专业自荐信范文
2013/12/25 职场文书
三八妇女节活动总结
2014/05/04 职场文书
处罚决定书范文
2015/06/24 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis