2017-06-21 5 views
1

を移動した場合に呼び出されていない、私のngOnInit角度2+ ngOnInit()ルータが自身から(新しいクエリのparams付き)現在のルートに私のhome.component.tsで

ngOnInit() { 
     console.log("ngoninitcalled"); 
     this.activatedRoute.queryParams.subscribe((params:Params) => { 
     let refresh = params['refresh']; 
     if(refresh){ 
      // do something refreshing 
     } 

} 

そして、ここでは私のcustomFunction

です
customFunction(email: string, username:string) { 
     // do something custom 
     this.router.navigate([''],{queryParams: {refresh:true}});  
} 

''ルートは、home.component.tsまたはHomeComponent(上にあるスニペット)にリダイレクトされます。

コンソールログを確認すると、HomeComponentが(this.router.navigate([''], {queryParams: {refresh:true}}経由で)他のコンポーネントからrefresh paramで呼び出されたとき、ngOnInit()が呼び出されることがわかります。しかし、HomeComponent自体から呼び出された場合(上記のコードのように)、ngOnInit()は呼び出されません。

だから、予想される動作であり、私は安全に(HomeComponent自体からにリダイレクトされている場合ngOnInitが呼び出されることはありませんと仮定して)手動でngOnInit()を呼び出すために私のカスタム関数でrouter.navigatethis.ngOnInit()を呼び出すことができますか?

+0

あなたはそれが唯一の倍時に初期化コンポーネントに自動的に呼ばれるので、あなたはあなたの関数を作成し、それを呼び出すためにそれを解決することができ、this.ngOnInitを呼び出すことはできません。 – aimprogman

+0

https://medium.com/@juliapassynkova/angular-2-component-reuse-strategy-9f3ddfab23f5 –

答えて

2

異なるパラメータを持つ同じ構成要素に移動するときngOnInitが呼び出されないことを予想される動作です。

しかし、あなたはないコールを手動でngOnInit必要があります。

サブスクリプションは、パラメータが変更されるたびに通知されます。そのため、subscribeメソッド内のコードは毎回実行されます。 ngOnInitを呼び出す必要はありません。

は購読以内にあなたにconsole.logを移動して、それを試してみてください。

+0

@DeborahKねえ、最終的にStackOverflowであなたをキャッチ:)再び角度2.おかげであなたのpluralsight当然な限りあなたの答えを愛しました!! – rahulserver

+0

ありがとう!ルーティングコースを見たことがありますか? – DeborahK

+0

まだ見ているが、価値があるだろう。私は間違いなく見ています! – rahulserver

関連する問題