2017-02-14 10 views
1

Ich schreibe einen einfachen Dienst zu setzen und den Wert eines Objekts zu erhalten. Der Code sendet den Wert an den Setter, aber beim nächsten Mal, wenn ich den Code bekomme, sind die Werte immer noch gleich. Kannst du bitte in den Code schauen und mir sagen, was ich vermisse? (Ich habe nicht enthalten alle Komponenten Header und Importe dieses kurz zu halten.)Angular Service aktualisiert nicht den Wert des Objekts

//service.ts 
export class NavService { 

    private location; 

    constructor(){ 

     this.location = { 
      next:'', 
      back: '' 
     } 
    } 
    setLocation(back:string, next:string){ 
     this.location.next = next; 
     this.location.back = back; 
    } 

    getLocation(){ 

    return this.location 
    } 

} 

Meiner Ansicht nach, ich habe eine Schaltfläche, um die nächste() oder zurück() ruft den Standort zu aktualisieren.

export class PlanComponent { 

    location; 
    currentPage : string = 'start'; 


    constructor(private nav:NavService){} 

    forward(){ 
    this.location = this.nav.getLocation(); 
    this.currentPage = this.location.next; 

    } 

} 

Neuer Speicherort ist das Laden einer neuen Komponente. Die neue Komponente soll den neuen Standort festlegen. Aber in der Elternkomponente, wenn ich versuche, den Ort zu bekommen, bekomme ich die gleichen alten Werte.

export class AboutComponent { 

    constructor(private nav: NavService){ 
     this.nav.setLocation('start', 'about'); 
    } 
} 

Wirklich schätzen Sie Ihre Zeit, um durch diese zu gehen!

+0

Nicht sicher, ob dies ein Tippfehler, aber es scheint mir, als ob Sie eine Methode wurden Aufruf, der nicht existiert. Sie rufen 'this.nav.setLocation ('start', 'about', 'family')' auf, aber die Methode ist nur für zwei Eingabeparameter definiert. –

+0

@alex, ich habe versucht, den Code zu vereinfachen und da könnte durch einige Reinigung ausgelassen werden. – iMad

Antwort

3

Es könnte sein, wegen NavService Lebenszyklus, könnte Ihre Komponente neue Instanz des Dienstes auf jeder Komponente Schöpfung erhalten. Stellen Sie sicher, dass die NavService vorgesehen auf Top-Level-Komponente oder Modul:

@NgModule({ 
    /* ... */ 
    providers: [ 
     NavService 
    ] 
    /* ... */ 
}) 
export class AppModule { 
} 
+0

das könnte das Problem sein. Ich importiere den Dienst sowohl auf der oberen als auch auf der untergeordneten Komponente und deklariere sie in jedem separat. Was wäre der richtige Weg, den Service zu importieren und zu deklarieren? – iMad

+0

das Importieren des Dienstes in jeder Komponente ist in Ordnung, aber es sollte "nur" (mit 'providers: []' declaration) nur einmal, wahrscheinlich im Anwendungsmodul, "bereitgestellt" werden. – admax

+0

Das war es. Über die Anbieter auf die harte Tour lernen. Vielen Dank! – iMad

Verwandte Themen