2014-09-19 72 views
0

我对使用AngularJS和Bootstrap的应用工作。我想拼命让我自动完成例如工作。当我的服务返回一个数组时,我的示例成功运行。然而,当我试着打与$ HTTP服务REST API,我再也不能得到自动完成结果的工作。

My Plunker is Here

有两件事情我需要坚持基于此功能在其它地方使用方式:

1. The $http call must happen in the service. 
2. The controller must call myService.getOptions. 

有人能告诉我为什么我的代码将无法正常工作。我很绝望。

回答

1

你需要让你的服务返回的结果,因为在你的承诺,它将返回整个响应,但你只需要提供的结果,所以只是在你的服务中添加映射。

this.getOptions = function(prefix) { 
    return $http.get('http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=60629').then(function(response){ 
     return response.data.results; //Return results 
    }); 
}; 

,并在您的视图做一些改变来适应数据: -

typeahead="option as option.marketName for option in getOptions($viewValue)" 
<h4><span bind-html-unsafe="match.model.marketname | typeaheadHighlight:query"></span></h4> 

Demo

或者在您的服务来回报预期的数据格式使用映射器在返回数据: -

return $http.get('http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=60629').then(function(response){ 
     return (response.data.results || []).map(function(itm){return {id:itm.id, name:itm.marketname}}); //map your data 
    }); 

Demo