我正在尝试将一个预先输入控件添加到我的项目中。我尝试使用过滤器选项,但有时,结果在数千的范围内,这会使我的应用程序的性能爬行
所以我要使用异步方法。
这里的问题是,我不能使用$ http服务来使用api,我需要使用客户专有的方法,由于授权原因并且它没有返回承诺,我需要通过成功和失败回调函数以获得结果。
这是我的先行者的结构
<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'的结果
知道如何解决并完成这项工作吗?
由于
答案 0 :(得分:0)
好吧,经过几天的努力,专注于其他事情后,我终于决定尝试解决它。
最终解决方案非常简单,我只需要创建自己的承诺作为起点,并将我的客户专有方法转换为承诺,最后以
结束var prom = new Promise(function (resolve, reject) {
customerPropietaryObject.get(<api rest url to consume>, function (results) { resolve(results) }, function (data) { reject(data) });
});
return prom.then(function (results) {
return results;
});
现在,我只需要弄清楚如何将数据显示为KEY | VALUE
列表,因为自动填充的查询是key
或value
包含文本字段文本