使用angularjs从视图中调用$ http.get方法

时间:2013-08-01 09:10:19

标签: angularjs

我正在尝试调用$ http.get方法来加载页面内容(这是一个电子邮件地址列表)。

当我的页面加载时,它会不断调用http.get方法,而我想只调用一次来加载电子邮件地址,然后将其存储在范围变量中。

我的观看代码是

<h2>Members</h2>

<!--<div>{{getTeamMembers()}}</div>-->
<div ng-repeat="member in teamParticipants">
   <span> </span> <span>{{member}}</span>
</div>

我的控制器类是

Controllers.controller(&#39; FixedTeamController&#39;,function($ scope,$ http,$ location){

$scope.addTeam = function() {
    $http.post('team', $scope.team).
    success(function(fixedTeam, status, headers, config) {
          //succcess
    }).
    error(function(fixedTeam, status, headers, config){
        console.debug("error");
    });
};

$scope.getTeamMembers = function(){

var teamUId = "12541254";

$http({method: 'GET', url: 'team/'+teamUId}).
success(function(data, status, headers, config) {
      var members = [];
      $(data.listOfMembers).each(function(id,partcipantEmail){
          $http({method: 'GET', url: 'users?email='+partcipantEmail}).
          success(function(participant, status, headers, config) {
              members.push("new member");
          })
      });
      $scope.teamParticipants = members;
}).
error(function(data, status, headers, config) {
      console.debug("error");
});

};

});

代码工作正常,但是它连续调用了getTeamMembers()函数,所以我的问题是我应该怎么做只调用一次函数。

编辑::添加其他方法&#34; addTeam&#34;用于添加新的团队成员(它使用不同的视图)。通过从内部控制器调用函数部分解决了问题,但是现在当我加载addTeam视图时,$ scope.getFixedTeam()函数也被调用,我不想调用这个函数。我怎样才能做到这一点 ? 的问候,

2 个答案:

答案 0 :(得分:4)

您将函数调用放在绑定中,这意味着它将在每个apply-digest [1]上执行。而是在控制器中调用getTeamMembers,并在视图中使用teamParticipants属性。

[1]:{{}}是Angular中的双向绑定,如果你绑定到一个函数,它必须每次都要评估结果,看看它是否是新的。这意味着每次AngularJS检查脏状态时,它都会调用所有绑定中的所有函数。这可能会导致非常昂贵的周期,因此只应在必要时进行!

答案 1 :(得分:3)

不需要在html中调用getTeamMembers()

你可以在函数定义之后调用它。(在函数下面)