猿问

vue做一个搜索,每次按下键盘都会请求一次?

一个类似微信的搜索,没有“搜索”按钮,就一个input框。

<input @keyup="load_list($event)">

现在一个问题:
输入“ABCD”
向后台发送了4次请求
A一次
B一次
C一次
D一次

于是我加了定时器,1秒后发送请求:
输入“ABCD”
向后台发送了4次请求
ABCD一次
ABCD一次
ABCD一次
ABCD一次

我要疯了,有好的解决方法么?


Smart猫小萌
浏览 1122回答 9
9回答

米脂

写定时器是完全可以实现的 每次输入的时候都要先清除定时器 然后再新开一个定时器 什么时候时间到了 什么时候才会触发。example:全局:let timer = null;method:{&nbsp; &nbsp; load_list(){&nbsp; &nbsp; &nbsp; &nbsp; clearInterval(timer);&nbsp; &nbsp; &nbsp; &nbsp; timer = setInterval(()=>{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ajax();&nbsp; &nbsp; &nbsp; &nbsp; }, 1000)&nbsp; &nbsp; }}try one try.

德玛西亚99

你需要防抖(debounce)函数

牛魔王的故事

比较简单稳定的方法:引入&nbsp;lodash。如果想控制输入后函数执行的频率,使用&nbsp;lodash&nbsp;中的&nbsp;debounce&nbsp;模块。参考链接

开心每一天1111

跟vue没关系,你用的keyup事件,就是每次按键了抬起就触发一次,你可以写个定时器,没问题,但是要用setinterval,var aa = setinterval(); 设置一个输入时限,入过在时限内,就clearInterval(aa),然后再加setinterval.

犯罪嫌疑人X

输入之后设置个定时器来控制请求,如果又监听到键盘的输入操作,取消定时器,如果没有就请求

慕尼黑的夜晚无繁华

用@input事件即可。改动最小

白板的微信

推荐@input事件首先你要搞清楚你搜索的规则(字符串length..)达到这个规则再进行请求
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答