Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular.js ui+;引导式输入前置+;异步调用_Javascript_Ajax_Angularjs_Twitter Bootstrap_Bootstrap Typeahead - Fatal编程技术网

Javascript angular.js ui+;引导式输入前置+;异步调用

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与angular.js指令一起使用,但是我用来填充autocomplete的函数发出了一个异步调用,我无法返回它来填充autocomplete。是否有任何方法可以使它与此异步调用一起工作?

我可以假定您使用的是引导2.x之前的类型吗

如果是,在文档中,
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的文档,如果您想进行异步调用,您可以只返回一个承诺。对不起,但我怎么做呢?什么是承诺?