vue2 debounce 实现

本文通过一个实例展示了在Vue2中如何实现debounce功能,以限制input事件触发AJAX请求的频率。在组件的mounted钩子中,使用$nextTick确保DOM更新后,为input元素添加'input'事件监听器,利用闭包实现debounce,避免频繁执行changeData方法。

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

最近在看vue2 发现了一个有趣的事情,就是在vue2里面很多属性都不能用比如:

debounce 这个属性是不能再vue2里面使用的的,但是在现实情况下又需要,比如在执行input 事件当中执行ajax的时候

就需要限制输入间隔,废话不多说,上代码:

<template>
  <div>
    <div>
      <input type="text" name="" id="inputValue" v-model="inputValue">
    </div>
    <div class="after">
      <p>{{inputValue}}</p>
    </div>
    <div class="before">
      <p>{{afterValue}}</p>
    </div>
  </div>
</template>


<script>
  import $ from 'jquery'
  import Vue from 'vue'
  export default {
    name: 'debounce',
    data () {
      return {
        inputValue: '',
        afterValue: ''
      }
    },
    methods: {
      changeData: function () {
        this.afterValue = this.inputValue 
      }
    },
    mounted: function () {
      var _t = this
      this.$nextTick(function () {
        $("#inputValue").on('input', debounce(function (e) {
          _t.changeData()
        }, 500))
        function debounce (fn, delay) {
          var timer = null
          return function () {
            var context = this
            var args = arguments
            clearTimeout(timer)
            timer = setTimeout(function () {
              fn.apply(context, args)
            }, delay)
          }
        }
      })
    }
  }

</script>


这是整个代码的核心,当执行input 事件的时候在mouted 绑定一个钩子函数,在每次输入的时候返回一个 闭包。闭包在每次输入的时候清除上一次的定时器,在规定时间之内只能执行一次代码...so easy 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值