我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue禁止重复点击发送多次请求如何实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue禁止重复点击发送多次请求如何实现

本篇内容介绍了“vue禁止重复点击发送多次请求如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

某些情况下,为了阻止用户短时间内重复点击某个按钮,导致前端向后端重复发送多次请求。

1.通过控制 loading 来设置 loading,或者 disabled

刚开始直接给按钮加上loading效果,即在请求前 loading为true, 在请求结束finally里loading置为false,以达到阻止重复点击的问题,但部分请求短时间内,用户依然可以双击触发多次请求。

2.使用Vue自定义指令

// 全局注册自定义指令Vue.directive("resetClick", {  inserted(el, binding) {    el.addEventListener("click", () => {      if (!el.disabled) {        el.disabled = true;        el.style.cursor = "not-allowed";        setTimeout(() => {          el.disabled = false;          el.style.cursor = "pointer";        }, binding.value || 1000);      }    });  },}); // 组件内使用<el-button type="primary" v-resetClick="1000" @click="confirm">    确 定</el-button>

3. 使用debounce函数

在工具类util.js文件中定义 防抖函数 (或直接使用第三方库 throttle-debounce等)

// 防抖debounce代码:function debounce(fn, delay) {  let timeout = null // 创建一个标记用来存放定时器的返回值  return function (e) {    // 每当用户输入的时候把前一个 setTimeout clear 掉    clearTimeout(timeout)    // 然后又创建一个新的 setTimeout, 这样就能保证interval 间隔内如果时间持续触发,就不会执行 fn 函数    timeout = setTimeout(() => {      fn.apply(this, arguments)      timeout = null    }, delay)  }}

vue组件中使用

<template>  <div>    <el-button type="primary" @click="handleClick">快速连续点击</el-button>  </div></template> <script>import { debounce } from '@/util/util.js' export default {  data() {    return {}  },  methods: {    handleClick: debounce(() => {      console.log('删除操作等业务逻辑')    }, 500),  },}</script> <style></style>

以上两种方式都存在问题

这两种方式已经基本上能满足防重复点击的需求,但实际测试时发现延时的时间不好控,如果延时时间短(<150ms)快速点击还是会有几率多次触发事件。如果延时时间长(>600ms),用户点击后会有个明显的延时过程才能触发事件,用户体验就不太好。

首先明确下我们想要实现的效果。

  • 用户在按下按钮的时候立即触发点击事件。

  • 用户在快速连续按下按钮的时候只触发第一次的点击事件。

  • 用户不间断疯狂点击按钮(暴力测试),也只是立即触发第一次的事件,在疯狂点击的过程中不会触发事件,即使超时时间已经过去。

4.最终解决方案lodash

lodash官方文档&mdash;&mdash;debounce

npm i lodash -S

组件中使用

<template>  <div>    <el-button type="primary" @click="handleClick">快速连续点击</el-button>  </div></template> <script>import { debounce } from 'lodash' export default {  data() {    return {}  },  methods: {    handleClick: debounce(      () => {        console.log('删除操作等业务逻辑')      },      500,      {        leading: true, // 在延迟开始前立即调用事件        trailing: false, // 在延时结束后不调用,保证事件只被触发一次      },    ),  },}</script>

“vue禁止重复点击发送多次请求如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue禁止重复点击发送多次请求如何实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue禁止重复点击发送多次请求如何实现

本篇内容介绍了“vue禁止重复点击发送多次请求如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!某些情况下,为了阻止用户短时间内重复点击
2023-07-05

vue 禁止重复点击发送多次请求的实现

本文主要介绍了vue 禁止重复点击发送多次请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-06

详解vue如何防止用户多次点击请求

在现代web应用程序中,用户操作经常需要与服务器进行交互。用户频繁点击按钮或提交表单可能会导致前端向服务端发送多个请求,这会导致性能下降和资源浪费。Vue.js是一个流行的JavaScript框架,提供了一种解决此问题的方法。在本文中,我们将讨论如何使用Vue.js防止用户多次点击请求的问题。1. 防抖防抖是一种在用户停止操作一段时间后再执行的技术。在Vue中,可以使用Loda
2023-05-14

vue怎么实现重复点击取消上一次请求封装

本篇内容主要讲解“vue怎么实现重复点击取消上一次请求封装”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现重复点击取消上一次请求封装”吧!使用场景重复点击或者多tab标签使用一个视图
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录