2017-02-14 71 views
1

我在寫一個簡單的服務來設置和獲取對象的值。代碼將值發送給setter,但下一次獲取代碼時,值仍然相同。你可以看看代碼並告訴我我錯過了什麼嗎? (我沒有包括所有的成分頭,進口保持這一短。)角度服務不更新對象的值

//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 
    } 

} 

在我看來,我有一個按鈕,調用next()的或後()來更新的位置。

export class PlanComponent { 

    location; 
    currentPage : string = 'start'; 


    constructor(private nav:NavService){} 

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

    } 

} 

新位置正在加載新組件。新的組件是假設設置新的位置。但在父組件中,當我嘗試獲取位置時,我會得到相同的舊值。

export class AboutComponent { 

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

真的很感謝您的時間來通過這個!

+0

不確定這是否是拼寫錯誤,但它在我看來就像調用了不存在的方法。您可以調用'this.nav.setLocation('start','about','family')',但該方法僅針對兩個輸入參數定義。 –

+0

@alex,我試圖簡化代碼,並有可能通過一些清理遺漏。 – iMad

回答

3

這可能是因爲NavService生命週期,您的組件可能會在每個組件創建時獲得服務的新實例。確保在頂層組件或模塊上提供NavService

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

這可能是問題所在。我在頂層和子組件中導入服務,並分別在每個組件中聲明它們。什麼是導入和聲明服務的正確方式? – iMad

+0

在每個組件中導入服務是可以的,但它可能只能在應用程序模塊中「提供」(使用'providers:[]'聲明)一次。 – admax

+0

就是這樣。以艱難的方式瞭解提供商。謝謝! – iMad