Javascript 引导typeahead未填充来自promise的响应
我的引导类型如下所示:Javascript 引导typeahead未填充来自promise的响应,javascript,twitter-bootstrap,promise,typeahead,bootstrap-typeahead,Javascript,Twitter Bootstrap,Promise,Typeahead,Bootstrap Typeahead,我的引导类型如下所示: <input id="inputId" type="text" ng-model="selected" typeahead="name for name in getSuggestions($viewValue) " typeahead-on-select="typeaheadOnSelect($item)" ng-trim="false"> $scope.getSuggestions = viewValue => { let deferre
<input id="inputId" type="text" ng-model="selected" typeahead="name for name in getSuggestions($viewValue) " typeahead-on-select="typeaheadOnSelect($item)" ng-trim="false">
$scope.getSuggestions = viewValue => {
let deferred = $q.defer();
getSuggestions(viewValue).then(words => {
deferred.resolve(words); // array of strings
})
.catch(()=>{
deferred.reject([]);
});
return deferred.promise;
};
$scope.getSuggestions = viewValue => {
let deferred = $q.defer();
getSuggestions(viewValue).then(words => {
deferred.resolve(words);
$scope.$digest();//this triggers the digest cycle
})
.catch(()=>{
deferred.reject([]);
});
return deferred.promise;
};
注意:当getSuggestions()返回数组而不使用任何承诺时,typeahead可以正常工作。在AngularJS中,resolve()的结果在$digest循环内异步传播,而不是立即传播。这意味着只有在(稍后)发生摘要循环时才会调用使用then()注册的回调 因此,调用$digest()或者如果需要,$apply()是运行摘要循环的一种方法 因此,需要将给定代码更新为以下内容:
<input id="inputId" type="text" ng-model="selected" typeahead="name for name in getSuggestions($viewValue) " typeahead-on-select="typeaheadOnSelect($item)" ng-trim="false">
$scope.getSuggestions = viewValue => {
let deferred = $q.defer();
getSuggestions(viewValue).then(words => {
deferred.resolve(words); // array of strings
})
.catch(()=>{
deferred.reject([]);
});
return deferred.promise;
};
$scope.getSuggestions = viewValue => {
let deferred = $q.defer();
getSuggestions(viewValue).then(words => {
deferred.resolve(words);
$scope.$digest();//this triggers the digest cycle
})
.catch(()=>{
deferred.reject([]);
});
return deferred.promise;
};
$scope.getSuggestions
返回承诺,对不对。。。所以,它不会返回一个你可以使用的数组with@JaromandaXtypeahead可以很好地实现承诺。我可以这么说,因为typeahead弹出窗口有时会出现,但很少出现。