AngularJS不断调用$ http

时间:2012-09-24 20:44:17

标签: angularjs

我对AngularJS很新(4小时新)并且我试图让http调用工作,但是看起来它发生的是Angular一直在反复调用http get请求。我确定这是因为我的做法是错误的。这就是我想要做的。

我的控制器文件片段 webservice工作正常。我在node.js app

中运行它
 function peopleController($scope,$http){
  $scope.getPeople = function(){
    $scope.revar = {};
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      console.log(data);
      $scope.revar = data;
    });
  }
}

我的list.html文件

   <div ng-controller="busController">
        <div class="blueitem">{{getPeople()}}</div>
   </div>

我知道我不会看到结果,因为我没有在我的getPeople方法中撤回任何东西但是我想看到我在chrome中看到的结果的日志输出,但是一百万次并且计数,因为角度一直反复调用该url方法。相反,它一直在打击。

如何获得角度才能返回响应一次?

2 个答案:

答案 0 :(得分:5)

您遇到的问题与AngularJS的工作方式有关 - 更确切地说 - 它决定模板是否需要刷新。基本上AngularJS将基于对模型的脏检查来刷新模板。不想在这里详细介绍太多细节,因为有一篇很好的文章解释它(How does data binding work in AngularJS?),但简而言之,它会随着模型的变化而不断变化,直到它稳定下来(不再能观察到模型的变化) 。在您的情况下,模型永远不会稳定,因为每次调用getPeople()方法时都会获得新对象。

接近这个的正确方法是(基于可能的解决方案):

function peopleController($scope,$http){
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      $scope.people = data;
    });      
} 

然后,在您的模板中:

   <div ng-controller="busController">
        <div class="blueitem">{{people}}</div>
   </div>

上述模板将在数据到达时自动刷新。

再一次,这只是一个可能的解决方案,所以我建议遵循AngularJS教程,以便更好地了解可能的内容:http://docs.angularjs.org/tutorial/

答案 1 :(得分:3)

一些事情。欢迎来到angularjs,它是一个很棒的框架。你可能不应该从网页上调用getPeople。相反,

 function peopleController($scope,$http){
  var getPeople = function(){
    $scope.revar = {};
    $http.get('/location/-79.18925/43.77596').
    success(function(data){
      console.log(data);
      $scope.revar = data;
    });
  }
  getPeople();
}

然后在html中

<div ng-controller="busController">
        <div class="blueitem">{{revar|json}}</div>
</div>

另外,我建议您查看ngResource,特别是如果您正在进行CRUD类型的应用程序。

希望这有帮助

- 丹