2016-01-07 74 views
0

我擁有來自不同js文件的這些控制器代碼。

NLGoalsCtrl.js

angular.module('mysite').controller('NLGoalsCtrl', function ($scope) { 
    $scope.goals_selected = []; 
}); 

NLSessionsCtrl.js

angular.module('mysite').controller('NLSessionsCtrl', function ($scope) { 
    //access $scope.goals_selected here 
}); 

我需要能夠訪問來自NLSessionsCtrl scope.goals_selected的$。我該怎麼做呢?多謝你們。

+1

您可能有角度服務,它將負責在您的控制器之間共享數據 –

+0

您可能希望使用角度服務共享該數據,因爲作用域對控制器來說是本地的。 – CollinD

+0

您將要使用服務在控制器之間共享此代碼。 https://docs.angularjs.org/guide/services – developthewebz

回答

3

使用工廠/服務來存儲goals這將負責在控制器之間共享數據。

myApp.factory('myService', [function() { 
     var goals = {}; 
     return { 
      getGoals: function() { 
       return goals 
      }, 

      setGoals: function(op) { 
       goals = op; 
      }, 
     } 
    }]) 
    .controller('NLGoalsCtrl', [function($scope, myService) { 
     $scope.goals_selected = {}; 
     //Update goals_selected 
     myService.setGoals($scope.goals_selected); 
    }]) 
    .controller('NLSessionsCtrl', [function($scope, myService) { 
     //Fetch 
     $scope.goals_selected = myService.getGoals(); 
    }]); 
+0

這將真的有用嗎?我的意思是,如果在執行myService.setGoals($ scope.goals_selected)之後goal_selected從視圖中被修改了,該怎麼辦?在這種情況下,myService.getGoals()會給我更新的值或一個陳舊的數據副本? – Yogesh

+1

您應該使用指向變量的指針,而不是函數。這樣你將始終保持同步,這意味着角度寄存器會改變,因爲指針是相同的,它也會在另一個控制器中更新。或者您將需要在您的控制器中設置觀察器,這將評估工廠功能 – devqon

+0

如何設置指針?它會在我的控制器中嗎? – Paul

1

$ scope是一個「綁定」到應用控制器的DOM元素的「對象」。所以$ scope的上下文仍然在控制器內部。

如果您要訪問2個控制器中的變量,試圖通過service /工廠或$ rootScope

這裏分享它是一個sample App

0

您想要在任何控制器中訪問的分配給$ rootScope。 並在您需要的任何控制器中訪問它。

相關問題