0

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

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

我的查看代码是

<h2>Members</h2>

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

我的控制器类是

Controllers.controller('FixedTeamController', 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() 函数,所以我的问题是我应该怎么做才能只调用一次函数。

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

4

2 回答 2

4

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

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

于 2013-08-01T09:20:30.110 回答
3

不需要在 html 中调用 getTeamMembers()

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

于 2013-08-01T09:51:45.983 回答