基于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 相关文章推荐
JQuery中的ready函数冲突的解决方法
May 17 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
Sep 15 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
DOM基础教程之事件类型
Jan 20 Javascript
简单谈谈javascript代码复用模式
Jan 28 Javascript
详解 javascript中offsetleft属性的用法
Nov 11 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
Nov 22 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
利用Angularjs中模块ui-route管理状态的方法
Dec 27 Javascript
JS排序之选择排序详解
Apr 08 Javascript
angular select 默认值设置方法
Jun 23 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 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者的疑难问答(2)
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
玩转CSS3色彩
2010/01/16 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
员工评语大全
2014/01/19 职场文书
5s推行计划书
2014/05/06 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
四大名著读书笔记
2015/06/25 职场文书
班级班风口号大全
2015/12/25 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书