我正在尝试使用我设置的 REST 资源让 Angular UI 引导输入提前。但我不确定如何让它与它的异步特性一起工作。
目前,我已经改编了 Angular UI Bootstrap 给出的示例。
所以我的 html 看起来像这样,调用 getLibs() 来获取 typeahead 下拉列表的列表。
<div class='container-fluid' ng-controller="TypeaheadCtrl">
<pre>Model: {{selected| json}}</pre>
<input type="text" typeahead="lib.name for lib in getLibs($viewValue)" active='active' ng-model="selected" typeahead-min-length='3' >
</div>
我的资源看起来像这样:
angular.module('LibraryLookupService', ['ngResource']).factory('Library',
function($resource){
return $resource( "../../api/seq/library/?name__icontains=:searchStr" , {} ,
{ 'get': {method:'GET'},
'query': {method:'GET', params: {} , isArray:false },
}
)
}
);
我的控制器看起来像这样(我猜它在这里我做错了):
function TypeaheadCtrl($scope , Library){
$scope.selected = undefined;
$scope.active = undefined ;
$scope.libs = [{name:'initial'} , {name:"values"}];
$scope.getLibs = function(viewValue){
console.log("value:", viewValue);
if (viewValue.length > 3 ) {
var return_vals = Library.query({searchStr:viewValue}, function() {
$scope.libs = return_vals.objects ;
console.log("here", $scope.libs) ;
}) ;
}
return $scope.libs
}
}
据我了解,预输入菜单是从 getLibs() 函数的返回值填充的。当调用 getLibs() 时,它正在查询 REST 接口,但最初返回一个空值。这是由提供给 Library.query() 方法的函数填充的,这是在从 REST 请求返回数据之后完成的。
这基本上意味着菜单的更新时间比我想要的晚。我输入“3456”,它会填充对 REST 接口的“345”查询结果。
从 Library.query() 函数返回响应时,如何更新菜单?我这样做对吗?