Jquery AngularJS/Typeahead-延迟调用$scope方法
我在这里有以下输入字段代码片段,我用以下方式调用AngularJSJquery AngularJS/Typeahead-延迟调用$scope方法,jquery,angularjs,angular-ui-typeahead,Jquery,Angularjs,Angular Ui Typeahead,我在这里有以下输入字段代码片段,我用以下方式调用AngularJS$scope方法 <input class="search-txt-input" id="partner_name" name="partner_name" title="Partner Name" type="text" autocomplete="off" ng-model="selectedPartner" typeahe
$scope
方法
<input class="search-txt-input"
id="partner_name"
name="partner_name"
title="Partner Name"
type="text"
autocomplete="off"
ng-model="selectedPartner"
typeahead="partner as partner.name for partner in retrievePartnerList($viewValue)"
typeahead-items="2"
typeahead-min-length="3">
因此,当我在文本字段中键入至少3个字符时,它将触发对retrievePartnerList
函数的AJAX调用
另外,我的服务器响应非常慢,所以对于10个字符,7个Ajax调用进入队列,一段时间后,我得到一个TimeOutError
因此,为了解决这个问题,我试图找到一种方法来延迟对retrievePartnerList()
方法的调用,这样就可以发送更少的AJAX调用,并可能减少服务器的负担
因此,我不确定如何在这里使用setTimeout()
函数
如果有人对此有任何想法,请告诉我。检查
AngularStrap
解决方案:
或
在javascript中可以很容易地做到这一点:
var autocomplete = $('#searchinput').typeahead().on('keyup', delayRequest);
function dataRequest() {
// api request here
}
function delayRequest(event) {
if(delayRequest.timeout) {
clearTimeout(delayRequest.timeout);
}
var target = this;
delayRequest.timeout = setTimeout(function() {
dataRequest.call(target, event);
}, 200); // 200ms delay
}
是的,您可以通过指定
typeahead wait ms
属性轻松延迟触发匹配。正如该属性的名称所暗示的,它以毫秒为单位获取一个值,并将延迟匹配,在用户停止键入后等待指定的毫秒数,然后向服务器触发请求
下面是一个演示,演示了这一点:谢谢你的回答,但我已经看到了这种方法,但在我的例子中,我不是从js文件调用typeahead函数,而是从视图中自动触发它。
AngularStrap
:我检查了这个,但我不理解这一点,因为我对Angular js框架还不熟悉,并且对其工作有基本的了解。对于我使用过的项目,我正在使用Typeahead模块(本链接末尾给出的示例),感谢您的回答,它在上面的js小提琴中工作,但在我的代码中不工作。不确定原因是什么,我刚刚添加了Typeahead wait ms=“10000”。但它仍然在每个键类型后触发I am使用0.3.0版本的API可能是typeahead等待ms未添加在此版本中..将不得不check@DeanM仅在0.5.0版本中添加了对typeahead wait ms
的支持(在0.4.0中有一些尝试性的功能,但0.4.0并不完全正常)。你必须升级到0.5.0才能让它像在我的plunker中一样工作。谢谢你提供的信息,但现在我使用的是“ui-bootstrap-tpls-0.5.0.min.js”,但仍然是typeahead wait ms属性对我不起作用,这是我添加后的输入元素