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 相关文章推荐
onpropertypchange
Jul 01 Javascript
使用prototype.js进行异步操作
Feb 07 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
Jan 19 Javascript
JS分页的实现(同步与异步)
Sep 16 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
vue-quill-editor富文本编辑器简单使用方法
Sep 21 Javascript
如何从头实现一个node.js的koa框架
Jun 17 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
Express 配置HTML页面访问的实现
Nov 01 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获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
2017/09/26 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
如何对python的字典进行排序
2020/06/19 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
酒店执行总经理岗位职责
2013/12/15 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
小小的船教学反思
2014/02/21 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
入职担保书范文
2014/05/21 职场文书
银行先进个人总结
2015/02/15 职场文书
教师反邪教心得体会
2016/01/15 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书