我有一个钻取屏幕流程:
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
此外,每个团队和玩家都有自己的网址,Angular使用这些网址来识别项目:
/teams/1/players/3
现在,当我访问/teams
url时,它在TeamsCtrl
内运行一个函数,它加载所有数据,然后我可以转到每个嵌套项并查看所有数据。它工作正常。
但是,如果我直接转到像/teams/1
这样的团队网址,或者像/teams/1/players/2
这样的玩家网址,则该功能无法运行,因为它不存在,也不在{ {1}} TeamCtrl
中{0}}现在都没有{/}}。
我觉得每次在玩家或团队之间切换时都会运行该抓取功能是不对的。那么,如果我在层次结构中不是从顶部到底部的链接而是任意的,那么如何确保我拥有所有数据呢?
答案 0 :(得分:0)
建议是创建一个包装数据结构本身的服务,并在服务上包含检索每个级别所需数据集的方法。
创建后,将服务注入每个控制器。另外一点是你只加载一次数据。
服务的角度文档非常好。可能看起来像这样。
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);
}]);