[英]Load data from a controller in AngularJS
我有一個向下鑽取屏幕流:
Teams
Team 1
Player 1
Player 2
Player 3
Player 4
Team 2
Player 1
Player 2
Player 3
Team 3
Player 1
對於每個我都有自己的控制器:
TeamsCtrl > TeamCtrl > PlayerCtrl
此外,每個團隊和球員都有其自己的url,Angular會使用它們來標識項目:
/teams/1/players/3
現在,當我訪問/teams
url時,它在TeamsCtrl
內部運行一個函數,該函數將加載所有數據,並且我可以轉到每個嵌套項目並查看所有數據。 工作正常。
但是,如果我直接去一個團隊網址像/teams/1
,或播放器網址像/teams/1/players/2
,該功能不會運行,因為它不存在,也沒有在TeamCtrl
既不PlayerCtrl
所以整個數據集現在是空的。
每次在球員或球隊之間切換時,我都覺得運行獲取功能是不合適的。 那么,如果我按鏈接而不是按層次結構從上到下進行訪問,如何確定我擁有所有數據呢?
建議創建一個服務來包裝數據結構本身,並在服務上包括用於檢索每個級別所需數據集的方法。
創建后,將服務注入每個控制器中。 另外,您只需加載一次數據。
服務的角度文檔非常好。 可能看起來像這樣。
teamDataService.factory('TeamData', ['$resource', function($resource){
// retrieve data from api call of some sort
var tdr = $resource('/path/to/data/service');
var data;
teamdata = tdr.get(function(){
data = teamdata; // assuming your api call returns an array of JSON objects.
};
return {
teams: function(){
return data;
};
team: function(id){
return data[id];
};
player: function(teamid, playerid){
return data[teamid].players[playerid];
};
}
}]);
myApp.controller('teamController', ['$scope', 'TeamData', function($scope, TeamData){
var Player1 = TeamData.player(1, 1);
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.