如何从离子2中的导航获取当前页面

时间:2016-11-22 17:19:41

标签: ionic2

我是Ionic2的新手,我正在尝试根据当前菜单选择构建动态标签。我只是想知道如何使用导航控制器获取当前页面。

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

从api文档我觉得getActiveChildNav()getActive()会给我当前页面,但我不了解ViewController / Nav

任何帮助将不胜感激。提前谢谢。

8 个答案:

答案 0 :(得分:34)

完整示例:

import { NavController } from 'ionic-angular';

export class Page {

  constructor(public navCtrl:NavController) {
  }

  (...)

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

获取当前页面名称的方法:

this.navCtrl.getActive().name

更多详情here

答案 1 :(得分:6)

OMG!这个真正帮助的伴侣,谢谢! @Deivide 我被困了一个月,你的回答救了我。 :) 谢谢!

if(navCtrl.getActive().component === DashboardPage){
    this.showAlert();
}
else
{
    this.navCtrl.pop();    
}

答案 2 :(得分:2)

我的团队必须构建一个单独的自定义共享菜单栏,该菜单栏将与大多数页面共享和显示。从此菜单component.ts内部调用this.navCtrl.getActive().name返回上一页的名称。在这种情况下,我们可以使用以下方式获取当前页面名称:

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

答案 3 :(得分:0)

this.navCtrl.getActive().name != TheComponent.name 要么 this.navCtrl.getActive().component !== TheComponent

也是可能的

答案 4 :(得分:0)

navCtrl.getActive()似乎是buggy in certain circumstances,因为如果刚刚使用.setRoot或者刚刚使用了.pop,它会返回错误的ViewController,而navCtrl.getActive()似乎返回正确的ViewController,如果.push被使用了。

使用viewDidEnter Observable发出的viewController而不是使用navCtrl.getActive()来获取正确的活动ViewController,如下所示:

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

我在viewDidEnter订阅中测试了这个,不了解其他生命周期事件..

答案 5 :(得分:0)

旧帖子。但这就是我在dev和prod中都获得当前页面名称的方式

this.appCtrl.getActiveNav().getActive().id

答案 6 :(得分:0)

代替

paragraph.InnerText = "Your variable containing the text";

使用此

...
...

//In debug mode alert value is 'HomePage'
//In production/ signed apk alert value is 'n'

alert(activeView.component.name);
if (activeView.component.name === 'HomePage') {
...
...

Source Link

答案 7 :(得分:-1)

您可以使用getActive来激活ViewControllerViewControllercomponent及其当前视图的实例。问题是比较方法。我已经找到解决方案,为我的所有页面组件设置了一些字段id:string,然后比较它们。不幸的是,简单的检查函数名称会导致getActive().component.name在缩小后中断。