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 相关文章推荐
脚本安需导入(装载)的三种模式的对比
Jun 24 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
Dec 12 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
编写高性能Javascript代码的N条建议
Oct 12 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
JavaScript设计模式之策略模式实现原理详解
May 29 Javascript
实现一个Vue自定义指令懒加载的方法示例
Jun 04 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
PHP递归算法的详细示例分析
2013/02/19 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
js left,right,mid函数
2008/06/10 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
vue多次循环操作示例
2019/02/08 Javascript
js编写简易的计算器
2020/07/29 Javascript
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python continue继续循环用法总结
2018/06/10 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
服装发布会策划方案
2014/05/22 职场文书
党员个人整改措施
2014/10/24 职场文书
党员思想汇报材料
2014/12/19 职场文书
期末复习计划
2015/01/19 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android