1

所以我有两个不同的html页面,两个不同的ng-apps和两个控制器。我试图在控制器和不同模块之间共享数据。在两个不同的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> 

服务被初始化两次。当我从loginApp设置数据设置数据,但是当我查询来自mainApp的数据,它检索未定义,我怀疑这是因为该服务被再次初始化,是一个不同的共享服务实例

+0

你为什么要把一个服务的实例放到'window'对象上?为什么把这个服务中的函数包装到一个IIFE中呢?在这种情况下,我会使用工厂,并将共享值存储在工厂中的对象中,并让一些工厂方法返回或写入值。 – C14L

回答

0

刚刚玩了一下。您可以将要在两个应用程序之间共享的_data放到window对象上。像这样

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

似乎将只需要采用这种方法 –

相关问题