10

Im przy użyciu Angular-ui składnik czołowy uderzyć w autouzupełnianie API, i parsuję dane wracam do tablicy o nazwie resp. Jednak nie widzę danych przekazywanych do listy rozwijanej autouzupełniania w interfejsie użytkownika. BTW, kontroler ma konsoletę console.log, która wyświetla dane poprawnie, więc wiem, że powraca z połączenia api.Angular-UI zamiast wyników w nagłówku

Oto moja funkcja kontrolera:

$scope.getLocationForSearch = function(locationString){ 

    $scope.locationString = locationString; 
    var url = '/autoComplete/' + locationString ; 
    $http({ 
     method: 'GET', 
     url: url    
    }).then(function successCallback(response) { 
     console.clear(); 
     var resp = response.data.RESULTS.map(function(item){ 
      console.log(item.name); 
      return item.name; 
     }); 

     return resp; 

     }, function errorCallback(response) { 
     console.log(response); 
    });  
} 

iw moim HTML:

<div class="input-group"> 
     <input 
      type="text" class="form-control" ng-model="asyncSelected" placeholder="Search city or zip code" 
      uib-typeahead="item for item in getLocationForSearch($viewValue)"/> 
     <i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i> 
     <div ng-show="noResults"> 
      <i class="glyphicon glyphicon-remove"></i> No Results Found 
     </div> 
     <span class="input-group-btn"> 
      <button class="btn btn-default" name="search" ng-model="asyncSelected" type="submit" ng-click="getWeather(asyncSelected)"> 
       <span class="glyphicon glyphicon-search" aria-hidden="true"></span> 
      </button> 
     </span> 
    </div><!-- /input-group --> 

Istnieje kilka stanowisk na tutaj o tym samym numerze, ale nikt tak naprawdę odpowiedzieć na mój problem. Każda pomoc jest doceniana.

+0

jak @beaver powiedział, trzeba zwrócić $ obietnicę –

Odpowiedz

11

Twoja funkcja getLocationForSearch() nie jest dobra: musi zwrócić dyrektywę obietnicy do uib-typeahead. kod więc praca jest:

$scope.getLocationForSearch = function(locationString) { 

    $scope.locationString = locationString; 
    var url = '/autoComplete/' + locationString ; 

    return $http({ 
     method: 'GET', 
     url: url 
    }).then(function successCallback(response) { 
     console.clear(); 
     return response.data.results.map(function(item) { 
     console.log(item.name); 
     return item.name; 
     }); 
    }, function errorCallback(response) { 
     console.log(response); 
    }); 
    } 

Oto przykład pracuje nad Plunker:

http://plnkr.co/edit/v67vR8f3nHImGSoAUyBd?p=preview

+0

początkowo miał ten sam kod i bardzo nie jestem pewien, jak to się różni od tego, co mam. Właśnie dodałem zmienną 'resp', aby debugować to, co zostało zwrócone. Zmieniłem go, ale nie zadziałało. Również "wyniki" powinny być we wszystkich wersjach ... Wiem, że niewiele się zmienia, ale w ten sposób zwracany jest obiekt Json. Brak błędów na konsoli. – pooky666

+3

Musisz zwrócić wynik funkcji $ http(), która jest obietnicą, zobacz https://docs.angularjs.org/api/ng/service/$http. Zamiast tego próbujesz zwrócić resp, która jest odpowiedzią w rozwiązanej obietnicy. To inna sprawa. – beaver

+1

Zobacz moją zmodyfikowaną odpowiedź na przykładzie. – beaver

Powiązane problemy