簡體   English   中英

從AngularJS中的控制器加載數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM