2016-11-07 8 views
0

Angular2サブスクリプションはページの読み込み時にのみ起動します。 routerLinkを離れてからに設定すると、home.componentcheckUser()機能が起動しません。Angular2はルート変更でサブスクリプションを使用しています

たとえば、routerLinkを別のページ(about)に設定します。私のページで私のホームページにrouterLinkを設定した場合、私のcheckUser()の機能がのhome.componentから機能しません。

サブスクリプションをこれらのルート変更で使用するには、どのような方法が最適ですか?

マイhome.component

export class HomeComponent implements OnInit { 
private username$: FirebaseObjectObservable<string>; 
private dashlink: boolean; 
private logsub: Subscription; 
    constructor(private mainService: MainService){ 
    } 

    checkUser(){ 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 

    ngOnInit(){ 
    this.checkUser(); 
    } 

} 
+1

あなたの説明は正しいものです。 ngOnInitは、ルートがヒットするたびに呼び出される必要があります。おそらくhttps://github.com/angular/angular/issues/8012に関連しています – Fiddles

答えて

1

一般的に、あなたは、各class(コンポーネントクラス)にconstructorに初期化するために必要なすべてのコードを配置することができます。

あなたの場合、constructorの中にチェックユーザーコードを入れたい場合は、HomeComponentが目標ルートと一致するたびに呼び出されます。

export class HomeComponent implements OnInit { 
    private username$: FirebaseObjectObservable<string>; 
    private dashlink: boolean; 
    private logsub: Subscription; 

    constructor(private mainService: MainService){ 
     // moving checkUser code inside constructor 
     this.logsub = this.mainService.userThere$.subscribe(isUser => { 
      if (isUser){ 
       alert("Yes"); 
      } 
     }); 
    } 
} 
関連する問題