我正在尝试使用我设置的REST资源来获取Angular UI引导程序typeahead。但是我不确定如何让它与异步性质一起工作。
目前我已经修改了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()函数返回响应时更新菜单?我正确地处理这个问题吗?
实际上,如果没有使用then()方法,您可以返回$ promise,因为它是多余的。 – mameluc 2015-05-12 09:13:02
我不明白你为什么在调用PersonService时传递person对象,因为我在工厂定义中看不到Person对象。 – peztherez 2015-12-05 16:08:20