2016-11-22 9 views
11

私はIonic2を初めて使用しています。現在のメニュー選択に基づいて動的なタブを作成しようとしています。私はちょうどナビゲーションコントローラを使用して現在のページを得ることができますかと思っています。 APIドキュメントからナビゲーションの現在のページを取得する方法2

... 
export class TabsPage { 
    constructor(navParams: NavParams,navCtrl:NavController) { 
    //here I want to get current page 
} 
} 
... 

私はgetActiveChildNav()またはgetActive()は私に、現在のページを与えるだろうと感じたが、私はViewController/Nav上の知識がありません。

ご協力いただければ幸いです。前もって感謝します。

答えて

19

全例:

this.navCtrl.getActive().name 

詳細here

+0

これは、navCtrlが(既にすべてのものを初期化して)私たちがすでに存在するページに移動するのを防ぐのに役立ちました!特にオブザーバーに複数回購読すると、エラーが発生します。 – pdewaard

-1

getActiveを使用してアクティブにすることができます。ViewControllerViewControllerにはcomponentがあり、現在のビューのインスタンスです。問題はコンパイル方法です。私はすべての私のページのコンポーネントのためのid:stringのようないくつかのフィールドを設定して解決策を見つけて、それを比較しました。残念ながら単純な関数名なので、getActive().component.nameは縮小後に壊れます。

+0

コンポーネントの比較 'getActive()。component === ComponentName'を使用するのは正しいですか?それは私のために働いた。 – Deivide

+0

しかし、命名が変更されるので、コードの縮小後は機能しません。 –

+0

このメソッドは、名前ではなくコンポーネント自体を比較します。あたかも以下を比較するかのように: '' 'x = y = function(){}; x === y; '' ' わかりますか? – Deivide

4

OMG:現在のページ名を取得する

import { NavController } from 'ionic-angular'; 

export class Page { 

    constructor(public navCtrl:NavController) { 
    } 

    (...) 

    getActivePage(): string { 
    return this.navCtrl.getActive().name; 
    } 
} 

方法!これは本当に助けられた仲間、感謝のトン! @Deivide 私は1ヶ月間立ち往生しています。あなたの答えは私を助けました。 :) ありがとう!

+0

本当になぜこれが私のために働いていないのか分かって欲しい。 – Cozzbie

+0

@ Cozzbie私にとってもうまくいきませんでした。値がコンストラクタでアクセスできないことが判明しました。ページ読み込み後に関数内でのみ実行されます。希望が役立ちます。 –

1

私のチームは、共有され、ほとんどのページで表示される個別のカスタム共有メニューバーを構築する必要がありました。このメニューの内部から、this.navCtrl.getActive().nameを呼び出すと、前のページ名が返されます。私たちは、このような場合には、現在のページ名を取得することができました使用:

ngAfterViewInit() { 
let currentPage = this.app.getActiveNav().getViews()[0].name; 
console.log('current page is: ', currentPage); 
} 
0

this.navCtrl.getActive().name != TheComponent.name または this.navCtrl.getActive().component !== TheComponent

することも

-1

navCtrl.getActive(可能である)、それは返すので、buggy in certain circumstancesのようです.setRootがちょうど使用された場合、または.popがちょうど使用された場合は間違ったViewControllerですが、navCtrl.getActive()は.pushが使用された場合に正しいViewControllerを返すようです。

そうのように、代わりに正しいアクティブのViewControllerを取得するためにnavCtrl.getActive()を使用してのviewDidEnter観察可能で放出されるのViewControllerを使用します。

navCtrl.viewDidEnter.subscribe(item=> { 
      const viewController = item as ViewController; 
      const n = viewController.name; 
      console.log('active page: ' + n); 
     }); 

私は知らない、viewDidEnterサブスクリプション内でこれをテストしています

関連する問題