基于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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
Javascript数组的排序 sort()方法和reverse()方法
Jun 04 Javascript
jquery实现div阴影效果示例代码
Sep 16 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
jQuery Pagination分页插件使用方法详解
Feb 28 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
Jun 13 Javascript
实现jquery放大镜的两种方法
Feb 22 jQuery
基于mpvue的小程序项目搭建的步骤
May 22 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
Nov 13 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
vue中的使用token的方法示例
Mar 10 Javascript
Vue实现计算器计算效果
Aug 17 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
cakephp打印sql语句的方法
2015/02/13 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
javascript Array对象基础知识小结
2010/11/16 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
javascript 闭包详解
2015/07/02 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
Python实现类继承实例
2014/07/04 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
2015/04/16 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
投标单位介绍信
2014/01/09 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
汽车广告策划方案
2014/05/31 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书