在前端開發(fā)中,有時我們需要實現(xiàn)輸入框輸入內(nèi)容后延遲一段時間后再觸發(fā)某個事件。例如在搜索框中輸入關(guān)鍵字后,需要等待一段時間后再發(fā)起搜索請求,避免頻繁請求給服務(wù)器帶來壓力。
這里我們介紹一種使用Vue實現(xiàn)輸入延遲的方法。
首先,我們需要使用v-model指令綁定輸入框的值,并使用debounce修飾符,表示輸入框的值不會立即同步到data中,而是在指定的時間內(nèi)等待用戶輸入完畢后再更新data。
<template>
<div>
<input type="text" v-model.trim.lazy="inputValue">
</div>
</template>
<script>
export default {
data() {
return {
inputValue: ''
}
},
watch: {
inputValue: _.debounce(function(newVal) {
console.log(newVal)
}, 1000)
}
}
</script>
在這個例子中,我們使用了lodash的debounce方法,可以設(shè)置一個延遲時間,等用戶輸入完畢后才會執(zhí)行watch中的回調(diào)函數(shù)。
需要注意的是,為了避免用戶頻繁輸入引起的性能問題,我們在v-model中使用了.trim修飾符,去除用戶輸入內(nèi)容前后的空格,并使用.lazy修飾符,表示輸入框默認不會立即同步數(shù)據(jù),只有在輸入框失去焦點時才會同步數(shù)據(jù)。
另外,我們還可以使用throttle修飾符實現(xiàn)輸入框輸入的連續(xù)觸發(fā)事件限制,避免用戶快速輸入后連續(xù)發(fā)起請求。
<template>
<div>
<input type="text" v-model.trim.lazy="inputValue">
</div>
</template>
<script>
export default {
data() {
return {
inputValue: ''
}
},
watch: {
inputValue: _.throttle(function() {
console.log(this.inputValue)
this.search()
}, 1000)
},
methods: {
search() {
console.log('search', this.inputValue)
}
}
}
</script>
在這個例子中,我們設(shè)置了一個名為search的方法,在watch中使用throttle修飾符,限制每1秒只能觸發(fā)一次search方法。防止用戶高速輸入引起的請求過多。
使用Vue實現(xiàn)輸入延遲需注意以下幾點:
- 使用v-model綁定輸入框的值,設(shè)置lazy修飾符,避免立即同步數(shù)據(jù);
- 使用debounce或throttle方法實現(xiàn)輸入的延遲觸發(fā)事件;
- 需要注意用戶輸入的連續(xù)觸發(fā)事件問題,避免頻繁請求;
- 頁面性能優(yōu)化,避免用戶輸入過程中頁面出現(xiàn)卡頓影響用戶體驗。