Vue使用自定义指令实现按钮防抖功能,防止多次调接口

在Vue开发中,提交保存按钮短时间内多次点击会重复请求后端接口,造成数据混乱。常见解决办法有三种:设置防抖、添加loading效果、在接口处防抖。实现思路是定义延迟执行方法,若延迟内再调用则重新计算执行时间,满足时间后执行逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

Vue使用自定义指令实现按钮防抖功能,防止多次调接口

项目场景

在开发中,有些提交保存按钮有时候会在短时间内被点击多次,这样就会多次重复请求后端接口,造成数据的混乱,比如新增表单的提交按钮,多次点击就会新增多条重复的数据。

在日常的开发中,在很多表单的提交过程中,会有保存按钮的多次点击的情况,如果不做处理,会造成数据的多次创建的情况。常见的解决办法有三种:

  1. 设置防抖,在按钮上进行防抖处理,规定时间内只会执行一次。
  2. 在提交按钮上添加loading效果,通过loading状态防止多次点击。
  3. 在接口处进行防抖处理,防止同一接口的多次调用。

实现思路

  • 首先,我们需要定义一个延迟执行的方法
  • 其次,如果在延迟时间内再调用了该方法,则需要重新计算执行时间
  • 在满足时间的情况下,执行逻辑

实现效果

在这里插入图片描述

实现代码

<template>
  <div>
  	 <div class="btn-debounce"><el-button v-debounce="debounceClick">防抖</el-button></div>
  </div>
</template>

<script>
import debounce from '../../directive/test/debounce'
export default {
  directives: {
    debounce
  },
  data(){
    return{
    }
  },
  methods:{
     debounceClick(){
      console.log('只触发一次!!!')
    }
  }
}
</script>

<style lang="scss">
</style>

debounce.js文件如下:

const debounce = {
  inserted: function (el, binding) {
    let timer
    el.addEventListener('click', () => {
      if (timer) {
        clearTimeout(timer)
      }
      timer = setTimeout(() => {
        binding.value()
      }, 1000)
    })
  },
}

export default debounce

如有疑问,欢迎评论区留言。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值