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 Event学习第三章 早期的事件处理程序
Feb 07 Javascript
jquery 笔记 事件
Nov 02 Javascript
js添加select下默认的option的value和text的方法
Oct 19 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
jquery 动态合并单元格的实现方法
Aug 26 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
Mar 15 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
微信小程序实现的动态设置导航栏标题功能示例
Jan 31 Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 jQuery
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 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
自己做矿石收音机
2021/03/02 无线电
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
jquery实现文字由下到上循环滚动的实例代码
2013/08/09 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
Python选课系统开发程序
2016/09/02 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
python之生产者消费者模型实现详解
2019/07/27 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
大学生毕业自我鉴定
2013/11/06 职场文书
公司行政经理岗位职责
2013/12/24 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python