我正在尝试调用$ 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()函数也被调用,我不想调用这个函数。我怎样才能做到这一点 ? 的问候,
答案 0 :(得分:4)
您将函数调用放在绑定中,这意味着它将在每个apply-digest [1]上执行。而是在控制器中调用getTeamMembers
,并在视图中使用teamParticipants
属性。
[1]:{{}}
是Angular中的双向绑定,如果你绑定到一个函数,它必须每次都要评估结果,看看它是否是新的。这意味着每次AngularJS检查脏状态时,它都会调用所有绑定中的所有函数。这可能会导致非常昂贵的周期,因此只应在必要时进行!
答案 1 :(得分:3)
不需要在html中调用getTeamMembers()
你可以在函数定义之后调用它。(在函数下面)