说明:在每次输入的值中如果停止输入超过1s就会触发input
事件
- 在
utils
文件夹里面创建一个debounce.js
文件
const TrackDirective = {
/* 输入框防抖
mounted: (el, binding) => {
const debounceTime = 1000;
el.addEventListener('input', () => {
clearTimeout(TrackDirective.timeoutId);
TrackDirective.timeoutId = setTimeout(() => {
binding.value();
}, debounceTime);
})
}, */
// 适配中文的防抖
mounted: (el, binding) => {
const debounceTime = 1000;
let composing = false;
el.addEventListener('compositionstart', () => {
composing = true;
});
el.addEventListener('compositionend', () => {
composing = false;
clearTimeout(TrackDirective.timeoutId);
TrackDirective.timeoutId = setTimeout(() => {
if (!composing) {
binding.value();
}
}, debounceTime);
});
el.addEventListener('input', () => {
if (!composing) {
clearTimeout(TrackDirective.timeoutId);
TrackDirective.timeoutId = setTimeout(() => {
binding.value();
}, debounceTime);
}
});
}
}
export default TrackDirective
- 在
main.js
里面进行引入
import { createApp } from 'vue'
import TrackDirective from './utils/debounce';
const app = createApp(App);
app.directive('track', TrackDirective)
- 在页面中进行使用时
v-track
注意:其中绑定的input事件是输入值时触发的事件
<van-field v-model="styleNo" v-track="input" required label="款号" placeholder="请输入款号" center />
const input = () => {
let params = {
styleno: styleNo.value //输入框的值
}
progressApi(params).then(res => { //调取的接口
console.log(res);
columns.value = res.Data
})
}