vue解决一个方法同时发送多个请求的问题


Posted in Javascript onSeptember 25, 2018

在项目开发过程中,让人抓狂之一的问题就是一个点击事件,当快速点击的时候,它会重复发送多个请求。这是不允许出现的。

但是怎么解决这个问题呢?

一般处理方法,就是点击的时候,立刻将该按钮disabled,这样就可以避免重复发送请求了。但是我发现这个有一个弊端,那就是:

如果,该事件有许多的验证,比如电话、邮箱格式是否正确呀,必填的是否填了呀等等。一旦你点击就把按钮disabled了,发现该填的没填,回去填完后发现按钮不能点了?那是因为刚才点击的时候被你disabled了,所以还得在验证的方法中取消按钮的disable。就造成了你点击的时候,第一步,将按钮disable了,然后一步一步向下验证,如果验证出错,得取消disable,当所有验证通过了,在请求的回调函数中,成功了也要取消disable,失败了也要取消disable,因为失败了用户多半还会继续点两次,不取消disable会让用户发现怎么点不了了。这就造成了全篇都是按钮disable的设置与取消。一旦有修改,很难维护的。

在vue中,有一个lodash,我们只需引入就可以使用了。比如以下代码:

<template>
 <div>
 <div class="bindBtn">
  <button class="bindDataBtn" @click="postAction">提交</button>
 </div>
 </div>
</template>
<script>
import _ from 'lodash'
export default {
 data() {
 return {
 
 }
 },
 mounted() {
 
 },
 methods: {
 sendAjax(){
  /*这里是请求的接口、参数以及回调函数等*/
 },
 postAction(){
  this.doPostAction()
 }
 },
 created(){
 this.doPostAction = _.debounce(this.sendAjax,500);
 }
}
</script>

我们首先将发送请求的ajax方法写在一个函数里面,在这里就是sendAjax函数,其次,我们引入lodash,然后将sendAjax这个函数用一个方法自定义一下,在这里就是doPostAction,其中_是我们引入的lodash,_.debounce是一个限制操作频率的函数,里面的是500是毫秒单位。

当执行点击事件的时候,也就是postAction函数,我们只需要调用doPostAction这个函数就可以了,而那个500的功能就是你在这个时间段里,无论执行了多少次这个点击事件,它都只会执行一次。

这样就少了我们通篇disable来disable去

最后附上官网例子:点击前往

以上这篇vue解决一个方法同时发送多个请求的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript入门·图片对象(无刷新变换图片)\滚动图像
Oct 01 Javascript
javascript call和apply方法
Nov 24 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
javascript动态添加checkbox复选框的方法
Dec 23 Javascript
jQuery动态修改字体大小的方法【测试可用】
Sep 09 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
vue.js语法及常用指令
Oct 29 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
Angular4 组件通讯方法大全(推荐)
Jul 12 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
Apr 17 Javascript
学习LayUI时自研的表单参数校验框架案例分析
Jul 29 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 #Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 #Javascript
vue观察模式浅析
Sep 25 #Javascript
详解搭建es6+devServer简单开发环境
Sep 25 #Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
Sep 25 #Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 #Javascript
VUE实现可随意拖动的弹窗组件
Sep 25 #Javascript
You might like
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
Laravel 5 学习笔记
2015/03/06 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
详解webpack+express多页站点开发
2017/12/22 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
vue接口请求加密实例
2020/08/11 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python实现公司年会抽奖程序
2019/01/22 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
python__new__内置静态方法使用解析
2020/01/07 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers
Java获取字符串编码格式实现思路
2022/09/23 Java/Android