Jquery AngularJS/Typeahead-延迟调用$scope方法

Jquery 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

我在这里有以下输入字段代码片段,我用以下方式调用AngularJS
$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属性对我不起作用,这是我添加后的输入元素