Javascript angular.js ui+;引导式输入前置+;异步调用
我将typeahead与angular.js指令一起使用,但是我用来填充autocomplete的函数发出了一个异步调用,我无法返回它来填充autocomplete。是否有任何方法可以使它与此异步调用一起工作?我可以假定您使用的是引导2.x之前的类型吗 如果是,在文档中,Javascript angular.js ui+;引导式输入前置+;异步调用,javascript,ajax,angularjs,twitter-bootstrap,bootstrap-typeahead,Javascript,Ajax,Angularjs,Twitter Bootstrap,Bootstrap Typeahead,我将typeahead与angular.js指令一起使用,但是我用来填充autocomplete的函数发出了一个异步调用,我无法返回它来填充autocomplete。是否有任何方法可以使它与此异步调用一起工作?我可以假定您使用的是引导2.x之前的类型吗 如果是,在文档中,typeahead()选项的source字段的描述如下: 要查询的数据源。可以是字符串数组或 功能。函数传递了两个参数,即 输入字段和进程回调。可以使用该功能 通过直接或异步返回数据源进行同步 通过进程回调的单个参数 您完全可以
typeahead()
选项的source
字段的描述如下:
要查询的数据源。可以是字符串数组或
功能。函数传递了两个参数,即
输入字段和进程回调。可以使用该功能
通过直接或异步返回数据源进行同步
通过进程回调的单个参数
您完全可以将异步函数作为源attr传入。source
函数可能类似于:
function someFunction(query, process) {
someAsyncCall(...query or so... , function(res) { // success callback
process(res);
}, function(err) { // error callback
process(null);
});
}
更新:
如果您正在使用Angular Bootstrap的typeahead,它应该会更容易。根据Angular Bootstrap的docs(),您只需返回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中的承诺:$q实际上我在做:@LuizGuilherme这更容易。根据Angular Bootstrap的文档,如果您想进行异步调用,您可以只返回一个承诺。对不起,但我怎么做呢?什么是承诺?