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

Ionic2 如何从离子2的导航中获取当前页面,ionic2,Ionic2,我是Ionic2的新手,我正在尝试根据当前的菜单选择构建动态选项卡。我只是想知道如何使用导航控制器获取当前页面 ... export class TabsPage { constructor(navParams: NavParams,navCtrl:NavController) { //here I want to get current page } } ... 从api文档中,我觉得getActiveChildNav()或getActive()将提供当前页面,但我不知道Vie

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

...
export class TabsPage {
  constructor(navParams: NavParams,navCtrl:NavController) {
    //here I want to get current page
 }
}
...
从api文档中,我觉得
getActiveChildNav()
getActive()
将提供当前页面,但我不知道
ViewController
/
Nav


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

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

完整示例:

import { NavController } from 'ionic-angular';

export class Page {

  constructor(public navCtrl:NavController) {
  }

  (...)

  getActivePage(): string {
    return this.navCtrl.getActive().name;
  }
}
获取当前页面名称的方法:

this.navCtrl.getActive().name

更多详情

天哪!这真的帮了大忙,伙计,非常感谢@迪维德 我被困了一个月,你的回答救了我。:) 谢谢


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

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

this.navCtrl.getActive().name!=组件名称
this.navCtrl.getActive().component!==组件

也可能是

navCtrl.getActive()似乎是,因为如果刚刚使用.setRoot或.pop,则它返回错误的ViewController,而如果使用.push,则navCtrl.getActive()似乎返回正确的ViewController

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

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

我已经在ViewDiCenter订阅中对此进行了测试,不知道其他生命周期事件。

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

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

而不是

...
...

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

alert(activeView.component.name);
if (activeView.component.name === 'HomePage') {
...
...
使用这个

...
...

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

alert(activeView.id);
if (activeView.id === 'HomePage') {
...
...

您是对的,如果使用组件比较
getActive().component===ComponentName
?它对我有用。但是在代码缩小后它就不起作用了,因为名称将被更改。这个方法比较组件本身而不是它的名称。好像我们要比较以下内容:
x=y=function(){};x==y...
...

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

alert(activeView.id);
if (activeView.id === 'HomePage') {
...
...