vue中watch与防抖动函数
vue中watch与防抖动函数使用场景表单中的某元素在用户输入时需要调api进行校验,由于用户在输入过程中无需时刻调用,这里采用防抖动函数,上代码<template><div class="register-group"><div class="form-input-item"&g
·
vue中watch与防抖动函数
使用场景
表单中的某元素在用户输入时需要调api进行校验,由于用户在输入过程中无需时刻调用,这里采用防抖动函数,上代码
<template>
<div class="register-group">
<div class="form-input-item">
<mt-field
v-model="submitData.EditEMail"
:state="validForm.emailValid.status"
:disableClear="true"
type="email"
placeholder="请输入你的邮箱地址">
</mt-field>
</div>
</div>
</template>
<script>
import { debounce } from '@/common/constants/global';
export default {
data() {
submitData: {
EditEMail: ''
}
},
watch: {
'submitData.EditEMail': {
handler(val) {
const regexp = /^([\w-]+(\.[\w-]+)*\@([\.\w-]+))+$/;
const verifyEmail = regexp.test(val);
this.EditEMailValid({ vm: this, val, verifyEmail});
}
}
},
methods: {
EditEMailValid: debounce(({ vm, val, verifyEmail }) => {
... your code
}, 300),
}
}
</script>
- debounce函数
const debounce = (func, wait) => {
let timeout = '';
return (v) => {
if (timeout) {
clearTimeout(timeout);
}
timeout = setTimeout(() => {
func(v);
}, wait);
}
};
防抖动函数实际是一个闭包,return出来的function内部有一个setTimeout,初次调用debounce会得到防抖动函数,这里主要说下与vue框架中watch一起使用,debounce不能写在watch函数内部,仔细观察debounce可以发现防抖的关键是定时器的使用和清除,上诉例子中timeout记录当前作用域中是否存在定时器。
还有一点需要注意的是debounce传入函数内部this的指向不是当前vue实例,我这里采用的是调用的时候讲this传入。
分享到此结束,有更好观点欢迎留言。。
更多推荐
已为社区贡献4条内容
所有评论(0)