2

I'm unable to get my asyn response to display in the typeahead dropdown. I previously thought it was due to a slow response but it appear this is not the issue. I'm returning a promise, as described in the docs, and I can see the correct set of data being returned, but the data is not being displayed. If I return some hardcoded data it works, just not with a promise.

controller

  function searchAuditLog(searchValue) {
    var params = angular.copy(vm.params);
    params.campaign_name = searchValue;
    var qsParams = $httpParamSerializer(params);
    // return [ // This works
    //   'DRAFT 1',
    //   'DRAFT 2',
    //   'DRAFT 3'
    // ];
    myapi.searchAuditLog(qsParams)
    .then(function(results){
      return results; // This doesn't
    });
  }

factory

  function searchAuditLog(qs) {
    return $http.get(myapi + '/1.0/audit?' + qs)
    .then(function(response) {
      return response.data.results.map(function(item){
        return item.metadata.campaign_name;
      });
    })
    .catch(getFailed)
  }

template

<input type="text" ng-model="vm.selectedEvents" placeholder="{{ 'idm.search' | translate }}" class="form-control" uib-typeahead="query for query in vm.searchAuditLog($viewValue)" class="form-control" typeahead-show-hint="true" typeahead-min-length="3" typeahead-on-select="vm.changeSearch($item, $model, $label, $event)" typeahead-no-results="vm.noSearchResults">
<i ng-show="loadingLocations" class="glyphicon glyphicon-refresh"></i>
<div ng-show="noResults">
  <i class="glyphicon glyphicon-remove"></i> No Results Found
</div>

1 Answer 1

4

Asynchronous typeahead needs promise object to show asynchronous data in options. Your searchAuditLog function from controller should also return a promise so that the data would get populated inside typeahead.

Controller

function searchAuditLog(searchValue) {
    var params = angular.copy(vm.params);
    params.campaign_name = searchValue;
    var qsParams = $httpParamSerializer(params);
    //return promise from here
    return myapi.searchAuditLog(qsParams)
     .then(function(results){
        return results;
     });
}
Sign up to request clarification or add additional context in comments.

2 Comments

Damn, missed that one. Thanks!!
@neridaj that happens, Glad to help you, Thanks :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.