2つの異なるng-appsと2つのコントローラがあります。私はコントローラと異なるモジュール間でデータを共有しようとしています。以下は2つの異なるng-appのコントローラ間でデータを共有するサービスが共有サービスを経由しない
アプリケーション
index.htmlを の基本構造である - indexController.js login.htmlと - 事があるloginController.js
sharedService.js
angular.module('sharedService', []).service('SharedService', function() {
var SharedService;
SharedService = (function() {
function SharedService() {
console.log('initializing');
}
var _data;
SharedService.prototype.setData = function(data) {
_data = data;
/* method code... */
};
SharedService.prototype.getData = function() {
return _data ;
};
return SharedService;
})();
if (typeof(window.angularSharedService) === 'undefined' || window.angularSharedService === null) {
window.angularSharedService = new SharedService();
}
return window.angularSharedService;});
angular.module("loginApp", ['sharedService'])
controller("loginCtrl",[
'SharedService', function(SharedService){
SharedService.setData(data);
}
angular.module("mainApp", ['sharedService'])
controller("someCtrl",[
'SharedService', function(SharedService){
console.log(SharedService.getData());
}
アプリが異なるので私は参照しています
<script src="sharedService.js"></script>
サービスは2回初期化されます。私はloginAppからデータを設定するとデータを設定しますが、mainAppからデータを照会すると未定義が取得されます。これはサービスが再び初期化され、sharedServiceの別のインスタンスになるためです。
なぜサービスのインスタンスを 'window'オブジェクトに置いていますか?そして、なぜサービスの機能をIIFEにまとめるのですか?この場合はファクトリを使用し、共有された値をファクトリのオブジェクト内に格納し、ファクトリメソッドで値を返すか書き込むことができます。 – C14L