1

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の別のインスタンスになるためです。

+0

なぜサービスのインスタンスを 'window'オブジェクトに置いていますか?そして、なぜサービスの機能をIIFEにまとめるのですか?この場合はファクトリを使用し、共有された値をファクトリのオブジェクト内に格納し、ファクトリメソッドで値を返すか書き込むことができます。 – C14L

答えて

0

ちょうどそれを少し演奏しました。 2つのアプリケーションの間で共有したい_datawindowオブジェクトに貼り付けるだけです。そう

angular.module('serv', []) 
.factory('MyFactory', function() { 
    window._data = 'default'; 
    return { 
    setData: function (val) { 
     console.log('setData() called with val == ', val); 
     window._data = val; 
    }, 
    getData: function() { 
     return window._data; 
    }, 
    } 
}); 

枚このplunkerを参照してください:http://plnkr.co/edit/4896aiczBjMiCXazB2Kk?p=preview

それは多少醜いのようですけど。おそらく少なくともそれを名前空間にしたいと思うでしょう。

+0

はこのようなアプローチをしなければならないようです –

関連する問題