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实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
js模拟弹出效果代码修正版
Aug 07 Javascript
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
全面解析Bootstrap中form、navbar的使用方法
May 30 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 Javascript
React Native悬浮按钮组件的示例代码
Apr 05 Javascript
vue移动端路由切换实例分析
May 14 Javascript
解决vue中虚拟dom,无法实时更新的问题
Sep 15 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
Vue SPA 初次进入加载动画实现代码
Nov 14 Javascript
国内常用的js类库大全(CDN公共库)
Jun 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中调用JAVA
2006/10/09 PHP
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
js实现弹窗效果
2020/08/09 Javascript
Python常用内置函数总结
2015/02/08 Python
Python正则捕获操作示例
2017/08/19 Python
Sanic框架配置操作分析
2018/07/17 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
详解Python 解压缩文件
2019/04/09 Python
python flask框架实现重定向功能示例
2019/07/02 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
python利用opencv实现颜色检测
2021/02/23 Python
vivo智能手机官方商城:vivo
2016/09/22 全球购物
AC Lens:购买隐形眼镜
2017/02/26 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
时尚休闲吧创业计划书
2014/01/25 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
财务整改报告范文
2014/11/05 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
孔子观后感
2015/06/08 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫