2016-09-21 9 views
2

ページをナビゲーションスタックに追加し続けると、ますます多くのSimpleComponentクラスのインスタンスが作成されます。このような理由から、私は複数回「ev」イベントと火災コードを複数回購読しています。ページ変更時のイベントの購読解除

私のプランナーの例では "there"と "back"に行き、さまざまな状況でイベントを発生させることで確認できます(結果についてはコンソールの警告を確認してください)。また、ナビゲーションスタックの一番上に戻っても、依然としてサブスクリプションがあることがわかります。それは私がそれを避けるために何をすべきか、私は疑問に思う私は

を残している実際のビューではありませんので、

ionViewWillLeaveはおそらく動作していませんか?私はSimpleComponentを古いスタイルのAngularJSディレクティブのようにインクルードして、アプリケーションで何度も使用したいと思います。

import { OnDestroy } from '@angular/core'; 

export class SimpleComponent implements OnDestroy { 

ngOnDestroy() { 
    this.ev.unsubscribe(); 
} 

Angular 2 documentationから:あなたはevからunsubscribeができOnDestroyを実装することができ

Here is plunker

export class SimpleComponent { 
    constructor(private ev: Events) { 
    this.ev.subscribe('ev', e => { 
     console.warn(e[0]); 
    }); 
    } 
} 


// home.ts template 
    <simple-component></simple-component> 
    <button (click)="go()">Go next page</button> 
    <button (click)="raiseEv()">Raise Event</button> 

答えて

2

ngOnDestroy、しなければならないロジックで

入れクリーンアップ・ロジックAngの前に走るularは指示文を破棄します。これは、アプリケーションの別の部分にこのコンポーネントがなくなることを通知する時間です。これは自動的にガベージコレクションされないリソースを解放する場所です。オブザーバブルとDOMイベントの登録を解除する。インターバルタイマーを停止する。このディレクティブがグローバルまたはアプリケーションサービスに登録したすべてのコールバックを登録解除します。私たちがそれを怠るとメモリリークが発生する危険性があります。

+0

問題を解決し、これは私の知る限り一歩を行くように1ページを追加(に便利ですナビゲーションスタック)、その後戻る(navスタックからページを削除する)。どうやって5ページをnavスタックにプッシュしたり、タブを切り替えるのですか?それはイオンの2つの問題、そしてタブの切り替えとnavスタックのプッシュの処理方法です。 –

1

私は@Injectableするアフターイベント受信アクションを処理するための責任が私のコードを移動することを決めた、それはまあ

関連する問題