Próbuję uzyskać dostęp do bootstrapów Angular UI przy użyciu skonfigurowanego zasobu REST. Ale nie jestem pewien, jak sprawić, by działało z jego asynchroniczną naturą.
W tej chwili dostosowałem przykład podany przez Bootstrap Angular UI.
więc mój html wygląda tak, wywołując getLibs(), aby uzyskać listę dla listy rozwijanej 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>
mój zasób wygląda tak:
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 },
}
)
}
);
mój kontroler wygląda tak (jestem zgadywania to tutaj robię coś niepoprawne):
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
}
}
Więc jak rozumiem, menu wpisywanie znaków z wyprzedzeniem jest wypełniany od wartości zwracanej z getLibs (). Wywołanie metody getLibs() powoduje wysłanie zapytania do interfejsu REST, ale początkowo zwracana jest pusta wartość. Jest on zapełniany przez funkcję dostarczaną do metody Library.query(), a odbywa się to po zwróceniu danych z żądania REST.
Oznacza to, że menu jest aktualizowane po jednym naciśnięciu klawisza później niż to, co chcę. Wpisuję "3456" i zapełnia się wyniki zapytania "345" do interfejsu REST.
Jak ustawić menu do aktualizacji po zwróceniu odpowiedzi z funkcji Library.query()? Czy poprawiam to poprawnie?
Właściwie można po prostu zwrócić obietnicę $ $ bez metody then(), ponieważ jest ona zbędna. – mameluc
Nie rozumiem, dlaczego przekazujesz obiekt osoby podczas wywoływania usługi PersonService, ponieważ nie widzę obiektu Person w definicji fabryki. – peztherez