1

Итак, у меня есть две разные 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

+0

Почему вы помещаете экземпляр службы в объект 'window'? И зачем переносить функцию в сервисе в IIFE? Я бы использовал фабрику в этом случае и просто сохранил общие значения внутри объекта на заводе, и некоторые фабричные методы возвращают или записывают значения. – C14L

ответ

1

Вы верны, служба не будет использоваться между двумя угловыми приложениями на разных страницах html. Вам нужно будет сохранить данные, которые вы хотите использовать в другом месте, кроме памяти, например localStorage или удаленный сервер. https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage

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

, похоже, просто придется пойти с таким подходом –

Смежные вопросы