当前位置:首页 > 日记 > 正文

angularjs实现上拉加载和下拉刷新数据功能

angularjs实现上拉加载和下拉刷新数据功能

虽说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上面

上拉加载则放在ion-list下面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

js实现楼层导航功能

js实现楼层导航功能

导航,楼层,功能,电脑软件,js,图如下所示:1.点击跳转到相应区域:页面scroll掉的距离 = 目标板块在文档中的垂直坐标 - 起始板块(目标位置)到视图顶部的距离;document.body.scrollTop = scrollLength;   document.documentElement.scrollTop = s…

ps怎样把人物制作成漫天飞舞的雪景

ps怎样把人物制作成漫天飞舞的雪景

雪景,效果,人物,电脑软件,ps,ps怎样把图片制作成漫天飞舞的雪景效果?运用PHOTOSHOP软件,可以很简单的制作大家想要的照片,下面和小编一起来看看具体步骤吧。最终效果图练习素材:具体步骤:1、将RAW格式的原文件在PS里打开,参数调整如下。2、打开…

excel2010开启夜间模式的方法步骤

excel2010开启夜间模式的方法步骤

方法,夜间模式,步骤,分析工具,加载,  夜间如果输入表格,太亮的话,对眼睛不好,开启夜间模式能够相对应的保护我们的眼睛。下面小编教你excel2010怎么开启夜间模式,希望对你有帮助!excel2010开启夜间模式的方法首先,我们打开excel表格,打开以后,我…

RedHat Linux 红旗9.0安装图解

RedHat Linux 红旗9.0安装图解

安装图解,红旗,电脑软件,RedHat,Linux,第1步:第一步:选择安装方式。 1、图形安装(直接回车) 2、文本安装(输入 linux text第2步:选择&ldquo;OK&rdquo;为检查光盘 选择&ldquo;Skip"跳过检查。我确认我的光盘是好的,我跳过!第3步:这一段是费话,跳过!4步…

AngularJs定时器$interval 和 $tim

AngularJs定时器$interval 和 $tim

详解,电脑软件,AngularJs,interval,timeout,$intervalwindow.setInterval的Angular包装形式。Fn是每次延迟时间后被执行的函数。间隔函数的返回值是一个承诺。这个承诺将在每个间隔刻度被通知,并且到达规定迭代次数后被取消,如果迭代次数未定…

详解微信小程序Radio选中样式切换

详解微信小程序Radio选中样式切换

详解,样式,程序,电脑软件,微信小,详解微信小程序Radio选中样式切换本篇文章主要讲解在微信小程序中如何根据Radio选中来切换样式。效果如下:原理主要是通过判断一个radio-group中哪个被选中,就让它加上一个“active”的样式。代码如下:<!--ind…

通过学习bootstrop导航条学会修改b

通过学习bootstrop导航条学会修改b

修改,导航条,基调,学习,颜色, 通过bootstrap文档对导航条样式的设置发现,其实本身是有一个类似于主题的概念- navbar-default:默认的外观- navbar-inverse:暗色背景的样式- 所以我们希望可以通过自定义一套完整的风格:比如自定义一个颜色基调 …

jQuery实现返回顶部按钮和scroll滚

jQuery实现返回顶部按钮和scroll滚

动画效果,返回顶部,按钮,功能,电脑软件,jQuery脚本:<script type="text/javascript"> $(function() { var scrollDiv = document.createElement('div'); $(scrollDiv).attr('id', 'toTop').html('^ 返回顶部').ap…

常用正则表达式匹配代码介绍

常用正则表达式匹配代码介绍

正则表达式,常用,代码,电脑软件,正则表达式,又称正规表示法、常规表示法。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器…

JavaScript判断输入是否为数字类型

JavaScript判断输入是否为数字类型

类型,输入,数字,方法,电脑软件,JavaScript判断输入是否为数字类型的方法总结前言很多时候需要判断一个输入是否位数字,下面简单列举集中方法。第一种方法 isNaNisNaN  返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字)。 NaN 即…

JS实现unicode和UTF-8之间的互相转

JS实现unicode和UTF-8之间的互相转

转换,电脑软件,JS,unicode,UTF,有一设备,为短信网关。需将PC送过来的UTF-8转换成UNICODE才能将内容通过短信发送出去,同样,接收到的短信为unicode编码,也许转换成UTF-8才能在PC端软件显示出来。程序很简单,只是走了不少弯路://unicode为1个接收…

vue.js利用Object.defineProperty

vue.js利用Object.defineProperty

双向绑定,电脑软件,js,vue,defineProperty,Object.defineProperty这个方法了不起啊,vue.js是通过它实现双向绑定的。。而且Object.observe也被草案发起人撤回了。。所以defineProperty更有必要了解一下了。几行代码看他怎么用var a= {}Objec…