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代码
Jul 01 Javascript
javascript写的一个链表实现代码
Oct 25 Javascript
javascript中日期转换成时间戳的小例子
Mar 21 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
JS实现当前页居中分页效果的方法
Jun 18 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
浅析jquery与checkbox的checked属性的问题
Apr 27 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
JavaScript编码风格指南(中文版)
Aug 26 Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP实现添加购物车功能
2017/03/06 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
jquery中的常用事件bind、hover、toggle等示例介绍
2014/07/21 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python递归实现汉诺塔算法示例
2018/03/19 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
学python最电脑配置有要求么
2020/07/05 Python
Python面向对象实现方法总结
2020/08/12 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
表达自我的市场:Society6
2018/08/01 全球购物
澳大利亚在线划船、露营和钓鱼商店:BCF Australia
2020/03/22 全球购物
华为python面试题
2016/05/03 面试题
浙大毕业生自荐信
2014/01/26 职场文书
大型车展策划方案
2014/02/01 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
毕业实习计划书
2015/01/16 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书