angularjs实现上拉加载和下拉刷新数据功能


Posted in Javascript onJune 12, 2017

虽说AngularJS 1.x版本中对于上拉加载,下拉刷新数据功能都有做些封装,但还是有些人不清楚。其实我一开始也是不懂的,so.现在把搞懂的记录下免得少走弯路。

now,begin:先说下拉刷新吧,原理就是每次下拉都重新去服务器请求过一次新的数据。一般这种刷新功能的响应数据(也就是服务器返回的(json)数据)中都会带有

"rowsOfPage": 3,
    "currentPage": 1,
    "totalPages": 10,
    "totalRows": 40,
    "rowsOfPage":10,
    "minRowNumber": 1,
    "maxRowNumber": 3,

这样的属性字段。所以我们下拉刷新时只要把请求参数设置为currentPage:1,rowsOfPage:10。也就是要设置当前页始终的值为1,一页要显示多少行。然后把返回的data保存在一个数组中,其实这样基本就算是完成了这功能,但为了严谨些我们最好再判断下这个数组的长度是否小于总条数。再在这判断里面再判断下这个数组长度是否等于0,如果是就说明没有数据。我这边就直接赋值一下下拉刷新的执行代码。

$scope.hasMore = false;
    //   $scope.dataNull=false;   // 无数据提示
    $scope.SName = "您当前没有待办事务";
    $scope.do_refresher = function() {
      $scope.currentPage = 1;
      $scope.bItems = [];
      ajax.post(reqUrl, {
        "rowsOfPage": rowsOfPage,
        "currentPage": $scope.currentPage
      }, function(listdata, successful) {
        if (successful) {
          $scope.bItems = listdata.datas || [];
          $scope.hasMore = ($scope.bItems.length < listdata.totalRows);
          if ($scope.bItems.length == 0) {
            $scope.dataNull = true;
          } else {
            $scope.dataNull = false;
          }
        } else {
          $scope.hasMore = false;
        }
        $scope.$broadcast("scroll.refreshComplete");
      });

而在页面中只要调用下<ion-refresher pulling-text="下拉刷新..." on-refresh="do_refresher()"></ion-refresher> 就可以了,其中$scope.$broadcast("scroll.refreshComplete");这个的作用是请求到数据刷新页面。

接下来是上拉加载数据功能。这个会比下拉刷新麻烦一点,但都懂了话也还好。上拉加载原理理解:请求的currentPage参数值为累加1.把请求到数据用push方法循环加到已有数据的数组中。这是理想的数据,我们平常在开发中还要判断这个是否有数据加载。我就先上下代码再说明应该会更好理解:

/*
     * 上拉加载,分批加载服务端剩余的数据
     */
    $scope.do_infinite = function() {
      if (!$scope.hasMore) {
        $scope.$broadcast("scroll.infiniteScrollComplete");
        return;
      }
      // 如果当前页数大于等于总页数,说明已经没数据可再加载了。
      $scope.currentPage += 1;

      ajax.post(reqUrl, {
        "rowsOfPage": rowsOfPage,
        "currentPage": $scope.currentPage
      }, function(listdata, successful) {
        if (successful) {
          //window.debug && alert("length " + listdata.datas.length + " yeshu " + $scope.currentPage);
          $scope.currentPage = listdata.currentPage;
          for (var i = 0; i < listdata.datas.length; i++) {
            $scope.bItems.push(listdata.datas[i]);
          }
          $scope.hasMore = ($scope.bItems.length < listdata.totalRows);
        } else {
          $scope.hasMore = false;
        }
        $scope.$broadcast("scroll.infiniteScrollComplete");
      });

其中hasmore是布尔值判断是否还有更多数据。然后在请求参数currentPage的值是用累加的。用for循环把返回的数据push到已有数据的数组中,再判断当前的数组长度(也就是获取到本地的总条数)是否等于请求到返回数据总条数属性的值。如果这布尔值为true说明还有数据。同上 $scope.$broadcast("scroll.infiniteScrollComplete"); 也是刷新页面数据。在页面中只要在ion-list下面添加<ion-infinite-scroll ng-if="hasMore" on-infinite="do_infinite()" immediate-check="false"></ion-infinite-scroll> 就可以执行。

note:在html页面中,下拉刷新的功能要放在ion-list上面angularjs实现上拉加载和下拉刷新数据功能

上拉加载则放在ion-list下面angularjs实现上拉加载和下拉刷新数据功能 有图片总不会理解错了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 轻松搞定快捷留言功能 只需一行代码
Apr 01 Javascript
JavaScript 设计模式 安全沙箱模式
Sep 24 Javascript
js全屏显示显示代码的三种方法
Nov 11 Javascript
招聘网站基于jQuery实现自动刷新简历
May 10 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
js用类封装pop弹窗组件
Oct 08 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
详解如何用VUE写一个多用模态框组件模版
Sep 27 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
Oct 10 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
Vue非父子组件通信详解
Jun 12 #Javascript
详解angularjs 关于ui-router分层使用
Jun 12 #Javascript
Vue 2中ref属性的使用方法及注意事项
Jun 12 #Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 #Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 #jQuery
AngularJS自定义指令详解(有分页插件代码)
Jun 12 #Javascript
前端构建工具之gulp的语法教程
Jun 12 #Javascript
You might like
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
js复制到剪切板的实例方法
2013/06/28 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
tab栏切换原理
2017/03/22 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
python处理csv数据的方法
2015/03/11 Python
详解Python Socket网络编程
2016/01/05 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
python素数筛选法浅析
2018/03/19 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
python实现电子词典
2020/03/03 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
python如何将图片转换素描画
2020/09/08 Python
毕业生个人的求职信范文
2013/12/03 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
关于倡议书的范文
2015/04/29 职场文书
财产分割协议书
2016/03/22 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python