2017-02-14 15 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 
    } 

} 

を、Iは位置を更新する)(次の()またはバックを呼び出すボタンを有しています。

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')'を呼び出しますが、このメソッドは2つの入力パラメータに対してのみ定義されています。 –

+0

@alex、私はコードを簡素化しようとしていたし、いくつかのクリーニングが残っていた可能性があります。 – iMad

答えて

3

ライフサイクルがNavServiceである可能性があります。コンポーネントが作成されるたびにサービスの新しいインスタンスが取得される可能性があります。 NavServiceは、トップレベルのコンポーネントまたはモジュールで提供されていることを確認します

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

が問題になる可能性があります。私はトップコンポーネントと子コンポーネントの両方でサービスをインポートし、それぞれ別々に宣言しています。サービスをインポートして宣言する正しい方法は何でしょうか? – iMad

+0

各コンポーネントでサービスをインポートするのはOKですが、おそらくApplication Module内では(provider:[] '宣言を使用して)"提供 "されています。 – admax

+0

それはそれでした。プロバイダについて学ぶのは難しい方法です。ありがとう! – iMad

関連する問題