2017-07-27 12 views
0

私はプロジェクトでAngular 4.2.xを使用しています.2ページあります:ページ1はフォームを持ち、ページ2はサマリーページです。Angular2:2ページのページ1のフォーム検証ステータスを取得するにはどうすればよいですか?

ページ1のすべてのフィールドが有効になると、両方のページで共有されるサービスに真のフラグが格納されます。私はページ2をロードするときにこのフラグを表示することを期待していますが、ページ1ではこの変数がtrueに設定されていますが、常にfalseです。

Page1Component:

export class Page1Component implements OnInt { 
    ngOnInit() { 
     this.form1.valueChanges.subscribe(changes => { 
     if (this.form1.invalid) { 
      this.globalService.updatePageStatus(false); 
     } else { 
      this.globalService.updatePageStatus(true); 
     } 
     }); 
    } 
} 

GlobalService:

export class GlobalService { 
    isPageCompleted: false; 

    updatePageStatus(isCompleted: boolean) { 
    this.isPageCompleted = isCompleted; 
    console.log("Is page 1 completed? " + this.isPageCompleted); 
    } 
} 

Page2Component:

export class Page2Component implements OnInit { 
    isPage1Completed = false; 

    ngOnInit() { 
     this.isPage1Completed = this.globalService.isPageCompleted; 
     console.log("On page 2, is page 1 completed? " + this.isPage1Completed); 
    } 
} 

そしてPage1ComponentとPage2Componentは遅延ロードされている異なるモジュールです。ブラウザコンソールでは、「ページ1が完成しましたか?true」と表示されますが、ページ2に移動すると「ページ2が完成しましたか?false」と表示されます。

ありがとう!

答えて

1

両方のコンポーネントで別々のサービスインスタンスを作成している必要があります(両方のプロバイダの装飾プロパティでそれを使用している)。

インスタンスを1つだけ作成します(プロバイダとしてクラスではなくモジュールで使用)。これはあなたの問題を解決するはずです。

0

シングルトンとして 'GlobalService'を使用していますか?それをPage2Componentにインポートすると、シングルトンではなく新しいサービスが作成されます。これは 'isPageCompleted'のデフォルト値をfalseにします。

代わりに、コンポーネントではなくモジュールでインポートしてください。

関連する問題