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 相关文章推荐
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
javascript 获取元素样式必杀技
May 04 Javascript
Javascript表单验证要注意的事项
Sep 29 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
Dec 01 Javascript
js判断文件格式及大小的简单实例(必看)
Oct 11 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
jQuery获取table表中的td标签(实例讲解)
Jul 28 jQuery
简单谈谈JS中的正则表达式
Sep 11 Javascript
Vue结合SignalR实现前后端实时消息同步
Sep 19 Javascript
微信web端后退强制刷新功能的实现代码
Mar 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
神族 Protoss 历史背景
2020/03/14 星际争霸
php访问查询mysql数据的三种方法
2006/10/09 PHP
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
常用的php ADODB使用方法集锦
2008/03/25 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
使用Math.floor与Math.random取随机整数的方法详解
2013/05/07 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
10款最好的Web开发的 Python 框架
2015/03/18 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Django框架视图函数设计示例
2019/07/29 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python随机模块random使用方法详解
2020/02/14 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
党员承诺书怎么写
2014/05/20 职场文书
国庆促销活动总结
2014/08/29 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
汶川大地震感悟
2015/08/10 职场文书
中秋节祝酒词
2015/08/12 职场文书