こんにちは!ぐちです。
Controller間でのデータ共有
AngularJSでアプリを作っていると画面とダイアログなどControllerをまたいでデータを共有したいときがあると思います。
そういった時は以下のようにfactoryを定義してcontrollerで使えるように引き渡します。
angular.module('app') .factory('AppData', function() { return { hogehoge: function() { return hogehoge; } }; });
angular.module('app') .controller('HogeCtrl', function($scope, AppData) { });
$scopeを共有したい
上記の方法で$scopeを共有したい場合もあると思います。そんな時はデータと同じ考え方で下記のようにコントローラ名をキーに$scopeを管理して共有する方法があります。
angular.module('app') .factory('AppData', function() { var sharedScopes = {}; return { setScope: function (key, value) { sharedScopes[key] = value; }, getScope: function (key) { return sharedScopes[key]; } }; });
使い方
$scopeをセットする場合は下記のように使います。
AppData.setScope(‘HogeCtrl', $scope);
$scopeを取得する場合は下記のようにします。
var hogeCtrlScope = AppData.getScope(‘HogeCtrl');