Limitar resultados de digitação antecipada
Estou usando a diretiva angular-ui typeahead para conectar-se à API do Google Maps e recuperar uma matriz de endereços. Normalmente, quando preciso limitar a quantidade de resultados visíveis, faço algo como:
<input typeahead="eye for eye in array | filter:$viewValue | limitTo:10">
Isso funciona perfeitamente e os resultados são limitados a 10. No entanto, quando tento fazer a mesma coisa com resultados assíncronos, não funciona. Dará mais resultados do que eu especifiquei nolimitTo
.
Estou fazendo algo incorretamente abaixo?
HTML:
<input ng-model="asyncSelected" typeahead="address for address in getLocation($viewValue) | limitTo:1" typeahead-loading="loadingLocations">
JavaScript:
$scope.getLocation = function(val) {
return $http.get('http://maps.googleapis.com/maps/api/geocode/json', {
params: {
address: val
}
}).then(function(res){
var addresses = [];
angular.forEach(res.data.results, function(item){
addresses.push(item.formatted_address);
});
return addresses;
});
};
Atualmente, estou fazendo o seguinte para solucionar o problema, só estou curioso para saber por que um simpleslimitTo
não funciona
$scope.getLocation = function(val) {
return $http.get('http://maps.googleapis.com/maps/api/geocode/json', {
params: {
address: val
}
}).then(function(res){
var addresses = [];
var resultNumber = res.data.results.length > 5 ? 5 : res.data.results.length;
for(var i = 0; i < resultNumber; i++){
var obj = res.data.results[i];
var addr = obj.formatted_address;
addresses.push(addr);
}
return addresses;
});
};