1

我对 AngularJS 非常陌生(4 小时新),我正在尝试让 http 调用正常工作,但是看起来它正在发生的事情是 Angular 一遍又一遍地调用 http get 请求。我确定这是因为我的方法是错误的。这就是我想要做的。

我的控制器文件的片段网络服务工作正常。我在 node.js 应用程序中运行它

 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 中看到的结果的日志输出,但是由于 angular 不断调用该 url 方法,所以我看到了一百万次并且还在计数再次。相反,它一直在打击。

如何获得角度以仅返回一次响应?

4

2 回答 2

5

您遇到的问题与 AngularJS 的工作方式以及 - 更准确地说 - 它如何决定模板需要刷新有关。基本上,AngularJS 会根据模型的脏检查来刷新模板。不想在这里讨论太多细节,因为有一篇很好的文章解释了它(数据绑定在 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/

于 2012-09-24T21:03:53.653 回答
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 类型的应用程序。

希望这可以帮助

- 担

于 2012-09-24T21:08:26.330 回答