2016-07-11 15 views
0

Ich habe ein wenig unorthodoxes eckiges Setup, und ich fange an zu zweifeln, ob es funktionieren wird.Teilen eines Dienstes zwischen mehreren eckigen Modulen

Ich habe die Web-App, die ich baue, in 5 Apps aufgeteilt. Jeder wird sein eigenes Modul haben, und sein eigener Schluckaufbau wird dieses Modul in eine verkleinerte js-Datei kompilieren, die im HTML enthalten sein wird. Es wird 1 js pro Seite erstellt.

Dann habe ich ein sharedService-Modul. Bei jedem der anderen Module wird dieses sharedService-Modul in das Modul injiziert. Der Shared Service hat seinen eigenen Schluck Build und wird in die Master-Vorlage aufgenommen, die jede andere Seite erbt, so dass jede Seite diese Shared Template js darauf aufbauen wird.

Ich finde jetzt zwar, dass sich der sharedService in einer App ändert, wird nicht reflektiert, wenn ich zum anderen navigiere. Ich denke, dass jede App ihre eigene Version von sharedService verwendet und sie überhaupt nicht geteilt wird. Genauer gesagt, wenn sie zur nächsten App navigiert, lädt die Seite die Dienste neu und lädt die Daten, die in ihnen existierten.

Ich verwende Typoskript und browserifizieren.

Ein Beispiel von einem meiner apps:

'use strict'; 

declare var angular, require:any; 

angular.module('compareApp', ['ui.router', 'sharedServices']); 

// require module dependencies 
require('./compareAppConfig.ts'); 
require('./compareController.ts'); 

Shared Service App:

'use strict'; 

declare var angular, require:any; 

angular.module('sharedServices', []); 

require('./services/dogService.ts'); 
require('./services/userService.ts'); 

Und ein Beispiel für einen der Dienste:

declare var require, angular:any; 

angular.module('sharedServices').service('userService', userService); 

const API_PATH = "/api/"; 

function userService($http, $q) { 

    var userData = { 
     favorites: [] 
    }; 

    function getUser(){ 
     return userData; 
    } 

    function saveFavorite(dogId){ 
     userData.favorites.push(dogId); 
    } 

    return { 
     saveFavorite: saveFavorite, 
     getFavorite: getFavorite 
    }; 
} 

export = userService; 

Also im Grunde, wenn Ich speichere einen Hund im Array "Favoriten" in einer App und navigiere dann zu einer anderen App, die leer ist.

+2

Wenn Sie buchstäblich 5 verschiedene Angular-App-Module erstellen, dann wird jedes eine eigene Instanz Ihres 'sharedServices'-Dienstes haben. Ich denke, dass Sie Ihr Design ändern möchten, so dass Sie 5 verschiedene Module alle unter einer einzigen Angular App haben. – Lex

+0

Ich denke, wenn Sie zu einer anderen App gehen, ist es nicht die gleiche Instanz des Dienstes. wenn du es neu lädst, lade den ganzen Dienst mit empy bitte neu – AlainIb

+0

@Lex Das ist, was ich dachte, aber ich fragte mich, ob jemand eine Lösung hatte. Wenn ich ein Modul erstelle, das alle anderen enthält, müsste ich meine App so umgestalten, dass sie ein 100% SPA ist, anstatt Seiten mit einer eigenen App? – Kolby

Antwort

0

Wenn Sie sagen, teilen Sie die Webapp meinst du separate HTML-Dateien?

Wenn Sie zu einer vollständig separaten Seite/html-Datei navigieren, wird Ihr Code beim Laden der Seite erneut ausgeführt. Daher werden alle Daten in Ihrem gemeinsam genutzten Dienst gelöscht.

Wenn Sie zu verschiedenen Seiten Ihrer Anwendung routen möchten, während Sie den Status beibehalten, empfehle ich, das clientseitige Routing mit dem ui-Router zu untersuchen.

Verwandte Themen