Предположим, у меня есть форма, которая извлекает и отображает информацию из API на основе ввода пользователем. Когда пользователь вводит свой запрос (для простоты, скажем, они меняют количество результатов на страницу), компонент должен реагировать и загружать новые данные. Я хочу дать пользователю буферную зону - скажем, 2 секунды. Если они вводят свой ввод и 2 секунды проходят без какого-либо нового ввода, компонент выполнит запрос axios. Однако, если в это время вводится больше ввода, "тайм-аут" сбрасывается на 2 секунды.
Я чувствую, что я бы использовал наблюдаемое свойство, чтобы справиться с этим, но я борюсь с реализацией. Там очевидный метод setTimeout
, но это не позволит мне сбросить таймер - я бы назвал его несколько раз с задержкой в 2 секунды.
Как, используя Vue.js, я могу подождать ввода пользователя, а затем ждать 2 секунд бездействия (на этом компоненте), а затем выполнить запрос axios?
Соответствующий шаблон Vue:
<template>
<input
type="number"
v-model.number="perPage" />
</template>
Соответствующий скрипт Vue:
<script>
export default {
data: function () {
return {
perPage: 25,
}
},
methods: {
myAxiosCall() {
}
}
}
</script>
Как вы указали, вы используете метод setTimeout().
Решение 1 - сделайте это внутри своего наблюдателя текста
сохраните результат setTimeout в переменной и используйте clearTimeout, когда вам нужно отменить. как это
let x = setTimeout(functionName, time);
//to clear -- when user starts typing clear the previously created timeouts
clearTimeout(x);
Решение 2
Используйте debounce (импорт lodash). Я нахожу сначала лучше. Там может быть много других подходов. Примите ответ, если это поможет.