Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在angularjs中使用ng keyup但仅在3秒后使用$http搜索对mysql的查询_Javascript_Angularjs_Http_Keyup - Fatal编程技术网

Javascript 在angularjs中使用ng keyup但仅在3秒后使用$http搜索对mysql的查询

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

我想用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 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();
}