2013-08-01 54 views
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',函數($範圍,$ HTTP,$位置){

$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()函數也被調用,我不想調用這個函數。我怎樣才能做到這一點 ? Regards,

+0

註釋掉''

{{getTeamMembers()}}
。並看看會發生什麼 – dcodesmith

回答

4

您將函數調用放入綁定中,這意味着它將在每個apply-digest [1]上執行。請在您的控制器中撥打電話getTeamMembers,並在視圖中使用teamParticipants屬性。

[1]:{{}}是Angular中的雙向綁定,如果你綁定了一個函數,它必須每次評估結果以確定它是否是新的。這意味着每次AngularJS檢查髒狀態時,它都會調用所有綁定中的所有函數。這可能會增加一個非常昂貴的週期,所以只能在必要時完成!

+0

嗨,非常感謝您的時間,添加功能的作品,我已經添加了完整的控制器代碼,所以當我導航添加新的團隊視圖時,它使用相同的控制器,並自動調用該函數。我想避免在添加新的團隊視圖時調用此函數。我該如何處理。謝謝你的時間。 – Shahzeb

+0

這聽起來像是它應該是一個不同的控制器,如果它是一個不同的視圖,但如果它絕對必須是相同的控制器,那麼需要某種'if'語句來在需要時加載團隊成員。在你的更新代碼中,順便說一下,我仍然可以在視圖中看到函數調用,而不是在控制器中看到! –

+0

我現在更新了代碼。 – Shahzeb

2

不需要在HTML

,你可以在函數定義之後調用它調用getTeamMembers()的(以下的功能)