基于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 相关文章推荐
表单提交验证类
Jul 14 Javascript
jQuery插件开发基础简单介绍
Jan 07 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
js实现跨域的多种方法
Dec 25 Javascript
基于JavaScript实现回到页面顶部动画代码
May 24 Javascript
jQuery AJAX timeout 超时问题详解
Jun 21 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
javascript实现一个网页加载进度loading
Jan 04 Javascript
JavaScript通过filereader接口读取文件
May 10 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
Jul 30 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 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
咖啡常见的种类
2021/03/03 新手入门
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
thinkphp缓存技术详解
2014/12/09 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
详解VUE 数组更新
2017/12/16 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
python的几种开发工具介绍
2007/03/07 Python
Python 字典与字符串的互转实例
2017/01/13 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python Map 函数的使用
2020/08/28 Python
Python读取ini配置文件传参的简单示例
2021/01/05 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
网上签名寄语活动留言
2014/01/18 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
新品发布会策划方案
2014/06/08 职场文书
植树节标语
2014/06/27 职场文书
倡议书的写法
2014/08/30 职场文书
机关作风建设心得体会
2014/10/22 职场文书
投诉书范文
2015/07/02 职场文书
python源码剖析之PyObject详解
2021/05/18 Python
python数字转对应中文的方法总结
2021/08/02 Python
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB