2016-12-13 3 views
0

Ich habe ein wenig mit Angular 2 gearbeitet, aber ich habe ein Problem gefunden, für das ich keine klare Lösung gefunden habe, nämlich wie man eine Verbindung zwischen einem Service und einem Modell herstellt. Während Komponenten einen Dienst einspeisen können und dafür sorgen, dass dieser Singleton bleibt und ihn global verfügbar macht, habe ich Modelle, die ich innerhalb dieser Komponenten deklarieren möchte. Wenn Sie versuchen, einen Dienst wie diesen zu übergeben, wird er scheinbar einen "Snapshot" des aktuellen Klassenstatus erstellen und nicht aktualisieren, wenn ich Änderungen an meinem Dienst anwende.Angular2 Verbindung zwischen Service und Modell

Erlauben Sie mir, ein Beispiel zu geben, was ich meine. Nehmen Sie das folgende „LanguageObject“ Modell: Es ist ein Modell, das mehrere Strings für verschiedene Sprachen gespeichert, die die richtige Zeichenfolge auf der Grundlage der derzeit definierten Sprache in einer Sprachdienst zurückkehren sollte:

export class LanguageObject { 
    nl : string; 
    fr : string; 
    en : string; 

setvalues(nl : string, fr: string, en: string) { 
    this.nl = nl; 
    this.fr = fr; 
    this.en = en; 
    } 

    selectedlanguage : string; 

    constructor(private languageService : LanguageService) { 
    this.selectedlanguage = languageService.language; 
    } 

    get() :string{ 
    if (this.selectedlanguage == "nl") { 
     return this.nl; 
    } else if (this.selectedlanguage == "fr") { 
     return this.fr; 
    } else { 
     return this.en; 
    } 
    } 
} 

Service:

@Injectable() 
export class LanguageService { 


    language : string; 

    constructor() { 
    this.language = "en"; 
    } 
} 

Aber die Modelle selbst werden so genannt, zu dem Dienst den entsprechenden Link zu verlieren:

constructor(private languageService : LanguageService) { 
    this.continuestring = new LanguageObject(languageService); 
    this.continuestring.setvalues("Verder","Continuer","Continue"); 
    } 

nacheinander, den Wert der Veränderung Sprache im Dienst wird nicht dazu führen, dass meine Modelle aktualisiert werden, es sei denn, ich lade den Wert in sie neu, während ich möchte, dass sie dies automatisch tun.

Was zu meiner Frage führt, Wie würde man den gewünschten Effekt erreichen, diese Modelle den Dienstwert abrufen zu lassen? Verwenden wir eine Form der Injektion oder bietet angular2 eine bessere Methode?

Antwort

0

Wahrscheinlich etwas in der Frage, die ich bin fehlt, aber wenn Sie zu LanguageObject.selectedlanguage immer gleich sein wollen LanguageService.language, brauchen Sie nicht selectedlanguage überhaupt ... Vor allem, da man Bezug auf LanguageService als Privateigentum von LanguageObject speichern . I.e.

export class LanguageObject { 
    get() :string{ 
     if (this.languageService.language == "nl") { 
      return this.nl; 
     } else if (this.languageService.language == "fr") { 
      return this.fr; 
     } else { 
      return this.en; 
     } 
    } 
} 

Außerdem würde ich wechselndes Design berücksichtigen, so LanguageService wird Sprache Wert zurückgeben, statt LanguageObject.