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 相关文章推荐
js弹出窗口之弹出层的小例子
Jun 17 Javascript
JQuery节点元素属性操作方法
Jun 11 Javascript
javascript实现检验的各种规则
Jul 31 Javascript
JavaScript中文件上传API详解
Apr 01 Javascript
深入理解Node.js 事件循环和回调函数
Nov 02 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
详解Angular操作cookies方法
Jun 01 Javascript
jQuery+PHP实现上传裁剪图片
Jun 29 jQuery
npm qs模块使用详解
Feb 07 Javascript
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
Cakephp 执行主要流程
2010/03/24 PHP
php数组添加元素方法小结
2014/12/20 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
js 深拷贝函数
2008/12/04 Javascript
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python3.8中使用f-strings调试
2019/05/22 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
企业消防安全制度
2014/02/02 职场文书
恐龙的灭绝教学反思
2014/02/12 职场文书
临床医学专业求职信
2014/08/08 职场文书
个人工作表现评价材料
2014/09/21 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2014年体育部工作总结
2014/11/13 职场文书
村官个人总结范文
2015/03/03 职场文书
用电申请报告范文
2015/05/18 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2019大学生实习报告
2019/06/21 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle