【发布时间】:2017-05-12 14:47:55
【问题描述】:
我正在尝试向我的项目添加一个预先输入控件。我尝试使用过滤器选项,但有时结果在数千个范围内,这使我的应用程序的性能非常糟糕
所以我要使用异步方法。
这里的问题是,我不能使用$http服务来消费api,我需要使用客户专有的方法,由于授权的原因,它没有返回一个promise,我需要通过一个成功和失败回调函数以获取结果。
这是我预先输入的结构
<div class="input-group typeahead">
<input type="text" class="form-control" ng-model="stopToEdit.STOP_SITE" uib-typeahead="site.SITE_CODE as site.SITE_NAME for site in sites" ng-keyup="fnGetSites(stopToEdit.STOP_SITE, stopToEdit.STOP_TYPE)"
typeahead-loading="loadingLocations" typeahead-no-results="noResults" typeahead-popup-template-url="siteList.html" />
<span class="input-group-btn">
<button class="btn btn-default" type="button" ng-click="fnSearchSites()"><span class="fa fa-binoculars"></span></button>
</span>
</div>
这是我为了填充站点数组而调用的方法
$scope.fnGetSites = function (val, stopType) {
if (val === '') {
$scope.sites = null;
return;
} else if (val.length < 4) {
$scope.sites = null;
return;
}
$scope.showLoadingSpinner = true;
blockUIOnCall = false;
customerPropietaryObject.get(<api rest url to consume>, function (results) {
$scope.sites = results;
$scope.$digest();
}, $scope.fnShowErroMsg);
}
问题是,结果存储正确,但$digest 和$apply 目前都无法显示结果。我需要执行另一个操作,例如在文本框中写入另一个字符或激活字段 blur 以显示结果。
所以,如果我写“stev”,我会得到结果,但在我写“steve”之前,我会得到“stev”的结果
知道如何解决和完成这个问题吗?
谢谢
【问题讨论】:
标签: javascript jquery angularjs twitter-bootstrap