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和注册表脚本实现右键收藏Web页选中文本
Jan 28 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
js 判断浏览器使用的语言示例代码
Mar 22 Javascript
Js操作树节点自动折叠展开的几种方法
May 05 Javascript
使用javascript实现json数据以csv格式下载
Jan 09 Javascript
javascript跨域的方法汇总
Oct 23 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
Javascript防止图片拉伸的自适应处理方法
Dec 26 Javascript
vue移动端路由切换实例分析
May 14 Javascript
JS实现区分中英文并统计字符个数的方法示例
Jun 09 Javascript
小程序点击图片实现自动播放视频
May 29 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使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php数组查找函数总结
2014/11/18 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
微信小程序入门教程
2016/11/18 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
详解tween.js的使用教程
2017/09/14 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
微信小程序scroll-x失效的完美解决方法
2018/07/18 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
Python实现视频下载功能
2017/03/14 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
opencv实现简单人脸识别
2021/02/19 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
远程教育心得体会
2014/01/03 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
保护地球的标语
2014/06/17 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript