基于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 相关文章推荐
javascript 文档的编码问题解决
Mar 01 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
js特殊字符转义介绍
Nov 05 Javascript
js获取form的方法
May 06 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
JS仿hao123导航页面图片轮播效果
Sep 01 Javascript
JavaScript 计算笛卡尔积实例详解
Dec 02 Javascript
Vue服务器渲染Nuxt学习笔记
Jan 31 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
el-form 多层级表单的实现示例
Sep 10 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
我的论坛源代码(三)
2006/10/09 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python读取表格类型文件代码实例
2020/02/17 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
研究生考核个人自我鉴定
2014/03/27 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
颐和园英文导游词
2015/01/30 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
导游词之湖北武当山
2019/09/23 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
OpenCV 图像梯度的实现方法
2021/07/25 Python