基于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 模拟JQuery的Ready方法实现并出现的问题
Dec 06 Javascript
统计jQuery中各字符串出现次数的工具
May 03 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
May 14 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
jquery+html5制作超酷的圆盘时钟表
Apr 14 Javascript
JS创建对象几种不同方法详解
Mar 01 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 Javascript
js图片轮播手动切换特效
Jan 12 Javascript
JS设计模式之惰性模式(二)
Sep 29 Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
Sep 13 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 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
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
python使用turtle库与random库绘制雪花
2018/06/22 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python 读取、写入txt文件的示例
2020/09/27 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
英国网上电器商店:Electricshop
2020/03/15 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
大学专科生推荐信范文
2013/11/23 职场文书
《都江堰》教学反思
2014/02/07 职场文书
庆祝国庆节标语
2014/10/09 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
水知道答案观后感
2015/06/08 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书