[英]Use angular-ui bootstrap typeahead with api callback function
我正在嘗試向我的項目添加預輸入控件。 我嘗試使用過濾器選項,但有時結果在成千上萬的范圍內,這使我的應用程序的性能得以爬升
所以我要使用異步方法。
這里的問題是,我不能使用$ 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”的結果
任何想法如何解決和實現這一目標?
謝謝
好吧,在將這些問題拋之腦后,專注於其他事情之后,我終於決定嘗試解決它。
最后,解決方案非常簡單,我只需要創建自己的promise作為起點,然后將我的客戶專有方法轉換為promise,最后得到
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
作為自動完成查詢,是因為key
或value
包含文本字段text
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.