我的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">
getSuggestions()返回一个promise,如下所示:
$scope.getSuggestions = viewValue => {
let deferred = $q.defer();
getSuggestions(viewValue).then(words => {
deferred.resolve(words); // array of strings
})
.catch(()=>{
deferred.reject([]);
});
return deferred.promise;
};
注意:当getSuggestions()返回一个不使用任何promise的数组时,typeahead工作正常。
答案 0 :(得分:0)
在AngularJS中,resolve()的结果在$ digest周期内异步传播,而不是立即传播。这意味着只有在摘要周期发生时才会调用(稍后)调用then()注册的回调。
因此,调用 $ digest()或者如果需要,$ apply()是导致摘要周期运行的一种方法。
因此需要将给定代码更新为以下内容:
$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;
};