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 对象模型 执行模型
Dec 06 Javascript
jquery DOM操作 基于命令改变页面
May 06 Javascript
js获取某元素的class里面的css属性值代码
Jan 16 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
jQuery实现的图片分组切换焦点图插件
Jan 06 Javascript
javascript中typeof操作符和constucor属性检测
Feb 26 Javascript
window.location.hash知识汇总
Nov 09 Javascript
jQuery基于扩展简单实现倒计时功能的方法
May 14 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
微信小程序实现美团菜单
Jun 06 Javascript
javascript中Set、Map、WeakSet、WeakMap区别
Dec 24 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 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
分享php邮件管理器源码
2016/01/06 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
Python装饰器基础详解
2016/03/09 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
执行Python程序时模块报错问题
2020/03/26 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5中Canvas与SVG的画图原理比较
2013/01/16 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
大四学生毕业自荐信
2013/11/07 职场文书
公司股权转让协议书
2014/04/12 职场文书
学雷锋月活动总结
2014/04/25 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
队名及霸气口号大全
2015/12/25 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python