我可以假设您正在使用 Bootstrap 2.x 的 typeahead 吗?
如果是这样,在文档中,描述了source
现场typeahead()
的选项是这样的:
要查询的数据源。可能是字符串数组或
功能。该函数传递两个参数,查询值在
输入字段和流程回调。可以使用该功能
通过直接或异步返回数据源来同步
通过进程回调的单个参数。
你绝对可以传入一个异步函数作为source
属性。这source
函数可能是这样的:
function someFunction(query, process) {
someAsyncCall(...query or so... , function(res) { // success callback
process(res);
}, function(err) { // error callback
process(null);
});
}
Update:
如果您使用 Angular Bootstrap 的 typeahead,它应该会更容易。根据 Angular Bootstrap 的文档(http://angular-ui.github.io/bootstrap/ http://angular-ui.github.io/bootstrap/),你可以只返回一个承诺typeahead
功能。文档中的一些示例:
$scope.getLocation = function(val) {
return $http.get('http://maps.googleapis.com/maps/api/geocode/json', {
params: {
address: val,
sensor: false
}
}).then(function(res){
var addresses = [];
angular.forEach(res.data.results, function(item){
addresses.push(item.formatted_address);
});
return addresses;
});
};
更简单的可能是:
$scope.getSomething= function(query) {
var promise = $http.get('...some url...', {
params: {
queryName: query
}
});
return promise;
};
或者你可以建立自己的承诺:
$scope.getSomething= function(query) {
var deferred = $q.defer();
someAsyncCall(...query or so... , function(res) { // success callback
deferred.resolve(res);
}, function(err) { // error callback
deferred.reject(err);
});
return deferred.promise;
};
事实上,很多服务,比如$http
只是当你打电话给他们时返回承诺。
有关 AngularJS 中 Promise 的更多信息:https://docs.angularjs.org/api/ng/service/ https://docs.angularjs.org/api/ng/service/$q