因为input输入时需要请求后台,结果每次输入一个字符都会请求,连续输就连续请求。
结果被领导发现,不能忍受,所以要求加一个防抖。
加就加呗,反正lodash.js有现成的debounce方法,于是,说干就干!
// html代码如下:
<el-input v-model="chartName" size="mini" @input="handleDebounce"></el-input>
// js 代码如下
import { debounce } from 'lodash';
methods: {
handleDebounce() {
debounce(this.handleAjax(), 500);
}
}
哈哈,真简单,准备自测一下,就提测吧!
当当当当...... 结果,不仅没有防抖成功,还报错了~
搞不懂,是我使用的方式不对吗?
于是,又尝试了几种写法:
// 写法一
methods: {
handleDebounce() {
debounce(this.handleAjax, 500);
}
} // 连请求都不对会发 // 写法二
methods: {
handleDebounce() {
return debounce(this.handleAjax(), 500);
}
}
// 还是不防抖,而且报错
一万只羊陀在我脑海里奔腾而过......
网上搜了各种文章,他们也都是这样写的呀~ 代码也欺负人吗?
好吧,抱怨是解决不了问题的,只好继续找......找呀找呀找朋友。
终于被我找到一个好朋友:
created() {
// 防抖函数,必须要这样定义才有效
this.handleDebounce = debounce(this.handleAjax, 500);
}
是的,你没有看到,这个方法要在ceated钩子函数里定义。(意不意外?)
然后,就真的成功防抖了(惊不惊喜?)
哦,对了,还可以不使用@input事件,而改用监听的方式:
// html代码:
<el-input v-model="youName" size="mini"></el-input>
// js代码:
watch: {
youName() {
this.handleDebounce()
}
},
created() {
// 防抖函数,必须要这样定义才有效
this.handleDebounce = debounce(this.handleAjax, 500);
}
为什么?防抖函数要这样做才生效呢?
好吧,我不知道,有知道的老铁,还希望在评论区告诉我呀,爱你哦!