2017-03-04 18 views
7

タブを使用してappComponentで定義されたrootPageに戻る方法を知りたいと思います。 setRootメソッドが期待通りに機能しません。タブページで使用すると、ナビゲーションスタックはクリアされません。 'ホームページ'には、ナビゲーションボタンの代わりに戻るボタンが表示され、タブのタイトルが表示されます。デフォルトではタブからルートページに移動

それらはナビゲーションスタック(例えば プッシュ()の射出ページ)に 離れてからまだナビゲートしている場合、ページはDOMにキャッシュされ、残されています。それらは、 ナビゲーションスタック(pop()またはsetRoot())から削除すると破棄されます。

上記のステートメントは、setRootを使用するとキャッシュからページが消去されることを期待しています。これは、通常のページでは使用されているが、タブでは使用されていない場合には当てはまります。

タブページのクラスには、ボタンをクリックしたときにルートページをホームに設定する関数があります。

goToHome() { 
this.navCtrl.setRoot(HomePage); 
} 

は、どのように私たちは、ホームページに戻されたときに何の戻るボタンとコンポーネントのHTMLテンプレートで提供されて使用されているホームのタイトルがないことを確認することができます。

+1

のための素晴らしい仕事これを試してみてください、あなたは取得することによって、試してみてくださいでした'rootNav'? setRoot(YourPage); 'これがうまくいけば、私は解説文を追加します詳細は全て – sebaferreras

+1

ありがとうございます。私は説明を感謝します。 – Rik

+0

それを聞いてうれしい!私は説明と答えを追加しました:) – sebaferreras

答えて

18

ちょうどあなたが各<ion-tab>がちょうど上記のナビゲーションセクションで のように、[root]プロパティに結合することをdocs

お知らせで見ることができるように。これは、それぞれ <ion-tab>が実際にはナビゲーションコントローラにすぎないためです。 これは、各 タブが独自の履歴スタックを有することを意味する、とNavControllerインスタンスがルートとしてページを設定するときに、あなたが使用している

ので、各タブの@Componentsが各タブに固有のものになる子供たちへ を注入しそのタブからのナビゲーションスタックであり、アプリ全体のものではありません。あなたが実行してメインナビゲーションスタックを取得する必要があります理由です:

constructor(private app: App,...) {...} 

そして

yourMethod(): void { 
    this.app.getRootNav().setRoot(YourPage); 
} 
+1

すばらしい答え...私は私の問題を解決しました:ありがとうございました:) –

+1

ありがとうsebaferreras!それは私の時間を節約する。 –

+1

それは私に多くの助けてくれてありがとう! –

1

をちょうどそれが私

this.childNavCtrl.setRoot(HomePage); 
+0

これは正しく、最新の解決策です。 – YATO

関連する問題