详解angular分页插件tm.pagination二次触发问题解决方案


Posted in Javascript onJuly 20, 2018

今天在学习angularjs的分页插件时遇到了一个前端的问题,谷歌浏览器开发者模式调试的时候发现每次点击分页刷新按钮会触发两次后台请求,ajax向后台发送了两次请求,这对于强迫症患者来说是一个比较恶心和感到不舒服的事情。

于是在网上也找到了靠谱的解决方案:http://jqvue.com/tm.pagination/ ,且在此维护者的这个版本中解决了此问题,同时注意 angularjs版本的配合使用。但是不满足于现状,我还是找到了自己的解决方案,不打针不吃药,就这么简单!粗暴!It's time to show the code!!

var app = angular.module("shopping", [ 'pagination' ]);
  app.controller("brandController",
      function($scope, $http) {
        $scope.reloadList = function() {
          //切换页码 
          $scope.findPage($scope.paginationConf.currentPage,
              $scope.paginationConf.itemsPerPage);
        }
        $scope.reload = true;
        //分页控件配置 
        $scope.paginationConf = {
          currentPage : 1,
          totalItems : 10,
          itemsPerPage : 10,
          perPageOptions : [ 10, 20, 30, 40, 50 ],
          onChange : function() {
            if(!$scope.reload) {
              return;
            }
            $scope.reloadList();//重新加载 这个方法会重复调用两次
            $scope.reload = false;
            setTimeout(function() {
              $scope.reload = true;
            }, 200);
          }
        };
        //分页
        $scope.findPage = function(page, rows) {
          
          $http.get(
              '../goods/findAll?pageNum=' + page + '&pageSize='
                  + rows).success(function(response) {
            $scope.list = response.rows;
            $scope.paginationConf.totalItems = response.total;//更新总记录数
          });
        }

      });

核心代码我已经用黑色字体加粗标识出来了,定义一个全局变量reload存于$scope上,第二次触发加载reload的时候就发现这个全局变量为false状态,则直接return。之后再用定时器setTimeout在200毫秒之后将其归位。下一次刷新不会受影响且每次刷新只会发送一次ajax,提升请求质量与用户体验。

注:此方法不仅限于实现ajax的请求重复发送问题,其他类似的重复行为可参考本实例的实现思想,注意全局变量的合理使用,减少内存浪费问题。

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

Javascript 相关文章推荐
jquery动画2.元素坐标动画效果(创建一个图片走廊)
Aug 24 Javascript
关于删除时的提示处理(确定删除吗)
Nov 03 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
es6 字符串String的扩展(实例讲解)
Aug 03 Javascript
bootstrap-table组合表头的实现方法
Sep 07 Javascript
vue axios基于常见业务场景的二次封装的实现
Sep 21 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
Apr 28 Javascript
JQuery中DOM节点的操作与访问方法实例分析
Dec 23 jQuery
微信小程序canvas动态时钟
Oct 22 Javascript
javascript遍历对象的五种方式实例代码
Oct 24 Javascript
小程序视频列表中视频的播放与停止的示例代码
Jul 20 #Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 #Javascript
JS+H5 Canvas实现时钟效果
Jul 20 #Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 #Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 #Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 #Javascript
详解vue-cli官方脚手架配置
Jul 20 #Javascript
You might like
apache rewrite_module模块使用教程
2008/01/10 PHP
php中error与exception的区别及应用
2014/07/28 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
2011/04/06 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
编写Python CGI脚本的教程
2015/06/29 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python dlib人脸识别代码实例
2019/04/04 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
利用python计算时间差(返回天数)
2019/09/07 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
维也纳通行证:Vienna PASS
2019/07/18 全球购物
致标枪运动员广播稿
2014/02/06 职场文书
购房意向书范本
2014/04/01 职场文书
工厂搬迁方案
2014/05/11 职场文书
党委领导班子整改方案
2014/09/30 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
学会Python数据可视化必须尝试这7个库
2021/06/16 Python