Javascript 在angularjs中使用ng keyup但仅在3秒后使用$http搜索对mysql的查询
我想用angularjs进行在线搜索,使用ng键控功能。但我认为在每个keyup上向BD进行查询是错误的。那个么,我如何设置计时器,使$http服务只在最后3秒钟并没有键控的情况下工作呢Javascript 在angularjs中使用ng keyup但仅在3秒后使用$http搜索对mysql的查询,javascript,angularjs,http,keyup,Javascript,Angularjs,Http,Keyup,我想用angularjs进行在线搜索,使用ng键控功能。但我认为在每个keyup上向BD进行查询是错误的。那个么,我如何设置计时器,使$http服务只在最后3秒钟并没有键控的情况下工作呢 <input type="text" ng-keyup="search(param.values, param.url)"> 您可以使用ng model options来debounce您的输入值,该值将告诉angular to update ng model在特定时间后更新。然后切换到ng ch
<input type="text" ng-keyup="search(param.values, param.url)">
您可以使用
ng model options
来debounce
您的输入值,该值将告诉angular to update ng model在特定时间后更新。然后切换到ng change
事件将比ng keyup
更有意义。简而言之,我们使用debounce
延迟API调用
<input type="text" ng-model="value" ng-change="search(param.values, param.url)"
ng-model-options="{ debounce: 3000 }"
在搜索模块中等待几秒钟不太符合人体工程学/用户友好
我们通常会在用户每次输入新字符时取消以前的请求
您可以通过向请求的timeout
属性传递承诺来实现这一点
您在搜索功能开始时初始化承诺:
abort = $q.defer();
这样,每次调用函数时,您都可以检查是否有承诺,并在发出新请求之前解决它(取消它)
if(abort) {
abort.resolve();
}
看看这本书。(并打开控制台,查看键入时请求被取消。)使用bedounce。所以,对于ng change和ng model options,只有在最后一次键控是在3秒前时,值才会更改,对吗?是的。。debounce将等待3秒,直到用户停止键入。。。我们使用了ng change
,因为我们想跟踪输入字段的模型值。@RoGGeR很高兴知道这有帮助,谢谢:)你能写更详细的plz吗?)我对angularjs一点也不在行。《工作劫掠》中的$q服务有什么用?@RoGGeR的承诺我只能把你引向这里,这是一个很难解释的话题。我以为$q是你自己的服务。链接已经足够了,谢谢!:)
abort = $q.defer();
if(abort) {
abort.resolve();
}