AngularJS ui typeahead不能使用http

时间:2013-08-07 20:16:32

标签: angularjs angular-ui

我一直试图让AngularJS ui打字机与我的后端一起工作,但没有成功。

在我的部分:

<input type="text" ng-model="selected" typeahead="language.id as language.name for language in getLanguages($viewValue) | filter:$viewValue"/>

在我的控制器中:

$scope.getLanguages = function(search) {
  // This works:
  return [{"id":"15","name":"Norwegian (Bokm\u00e5l)","short":"no"},{"id":"45","name":"Norwegian (Nynorsk)","short":"nn"}];

  // This doesn't work:
  return $http.get('/json/suggest/languages/' + search).success(function(response) {
    return response;
  });
}

正如你所看到的那样,当我在JS中静态定义响应时,它不起作用,而不是从后端检索它时。静态响应是从后端响应中复制粘贴的。 Http请求正常,我可以在开发人员工具中看到响应,格式正确但是没有出现typehead。知道为什么会这样吗?

顺便说一下,我用这个Plunker作为例子:http://plnkr.co/edit/eGG9Kj?p=preview

谢谢!

2 个答案:

答案 0 :(得分:2)

您期望$http.get同步返回值。 AFAIK不是它的工作原理。这就是我要做的事情:

$scope.languages = [];

$scope.getLanguages = function(search) {
    $http.get('/json/suggest/languages/' + search).success(function(response) {
        $scope.languages = response;
    }
}

然后你需要将typeahead绑定到$scope.languages并找出如何在键入时调用getLanguages - 可能需要某种指令。

答案 1 :(得分:1)

您的代码中存在两个问题:

  • 您正在使用 返回承诺的success,而是将其更改为then;
  • 完成上述更改后,您只需返回数据而不是整个response

更改您的代码:

return $http.get('/json/suggest/languages/' + search).then(function(response) {
    return response.data;
});