带有$ http.get的Angular UI Typeahead

时间:2013-09-12 15:39:50

标签: javascript json angularjs angular-ui-bootstrap

我正在尝试使用JSON(而不是JSONP)从本地服务器获取数据,并使用Angular UI bootstrap和Angular在typeahead中显示它。我能够通过我在本网站上找到的其他示例来获取timeout()和jsonp,所以我知道promises有效。

function DepedencyCtrl($scope, $http, $timeout, filterFilter) {
...
$scope.typeahead = function(type, name) {
  return $http.get('pulldata', {params: {type: type, name: name}}).success(function(data){
    return filterFilter(data, name);
  }, 1000);
};  

当我在调试器中运行此代码时,返回filterFilter行运行。我可以用JSON格式看到我的数据,但是我迷失了踩过Angular代码。有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

你正在为angular提供一个回调函数来调用http成功。在你的先行函数返回很久之后,http调用成功了。 javascript中你必须要解决的一件大事就是有大量的asynchcrony正在进行中。你启动一个http请求,给它一个回调,然后离开。有角度的东西最终会调用你的成功函数,当你的成功函数返回时,你最终会回到角落里。

Angular很好,因为在大多数事件中,它会检查它知道需要注意更改的任何值/表达式的更改。然后,它将应用在这些更改上发生的任何行为。所以Angular有一个名为$digest的特殊过程来执行此操作。此行为通常被称为角度的“双向绑定”功能。

你想利用angular的双向绑定,例如:

$scope.typeaheadText = "";
$scope.typeahead = function(type, name) {
  return $http.get('pulldata', {params: {type: type, name: name}}).success(function(data){
    $scope.typeaheadText = data.typeaheadText;
  }, 1000);
};  

对应的HTML:

<span ng-controller="YourTypeaheadCtrl">
{{typeaheadText}}
</span>