参考:
vue记录-vue中使用lodash _.debounce防抖不生效原因,解决方案
https://blog.csdn.net/Delete_89x/article/details/122000444
问题代码:
<el-input v-model="slotProps.form.condition" placeholder="请输入" @input="inputChange" ></el-input> ... load() { // 加载列表 },
// 问题处 inputChange() {
debounce(this.load())
},
封装的debonce函数:
/** * 防抖函数 短期内大量触发同一事件,只会执行最后触发的一次 * @param {Function} fn 需要防抖的函数 * @param {Number} delay 毫秒,防抖期限值 */ export const debounce = (fn, delay = 500) => { let timer = null; return function () { if (timer) { clearTimeout(timer); } timer = setTimeout(() => { fn.apply(this, arguments); }, delay); }; };
原因:debounce()返回的是一个函数,一个完成的执行应该是:debounce()(),问题代码直接单纯的调用一次,拿到了返回函数,但是并没有执行
解决方法:执行返回的函数
修改后的代码:
/** * inputChange拿到debounce()的返回结果 - 函数 * 这样input事件触发的时候就直接是debounce()()了,所以是可以正常执行的 */ inputChange: debounce(function () { // 注意,不要在debounce里写箭头函数,否则this的指向就是undefined,而不是Vue实例对象 this.load(); })
标签:load,防抖,vue,函数,debounce,timer From: https://www.cnblogs.com/linjiangxian/p/17646293.html