Итак, у меня есть две разные html-страницы, два разных ng-приложения и два контроллера. Я пытаюсь обмениваться данными между контроллерами и разными модулями.Обмен данными между контроллерами в двух разных ng-приложениях не работает через общий сервис
Ниже приведена основная структура приложения
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, он извлекает неопределенные данные, я подозреваю, что это связано с тем, что служба снова инициализируется и является другим экземпляром sharedService
Почему вы помещаете экземпляр службы в объект 'window'? И зачем переносить функцию в сервисе в IIFE? Я бы использовал фабрику в этом случае и просто сохранил общие значения внутри объекта на заводе, и некоторые фабричные методы возвращают или записывают значения. – C14L