Как получить текущую страницу от навигации в ионной 2

Я новичок в Ionic2, и я пытаюсь создать динамические вкладки на основе текущего выбора меню. Мне просто интересно, как я могу получить текущую страницу с помощью навигационного контроллера.

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

Из документации api я чувствую, что getActiveChildNav() или getActive() предоставит мне текущую страницу, но я не знаю о ViewController/Nav.

Любая помощь будет оценена. Заранее спасибо.

Ответ 1

Полный пример:

import { NavController } from 'ionic-angular';

export class Page {

  constructor(public navCtrl:NavController) {
  }

  (...)

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

Способ получения текущего имени страницы:

this.navCtrl.getActive().name

Подробнее здесь

Ответ 2

О, МОЙ БОГ! Это действительно помогло, Тонны Спасибо! @Deivide Я застрял в течение 1 месяца, ваш ответ спас меня. :) Благодарю!

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

Ответ 3

Моя команда должна была создать отдельную настраиваемую общую панель меню, которая будет совместно использоваться и отображаться на большинстве страниц. Изнутри этого меню компонент.ts вызывает this.navCtrl.getActive().name возвращает this.navCtrl.getActive().name предыдущей страницы. В этом случае нам удалось получить имя текущей страницы, используя:

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

Ответ 4

this.navCtrl.getActive().name != TheComponent.name или this.navCtrl.getActive().component !== TheComponent

также возможно

Ответ 5

navCtrl.getActive(), похоже, ошибочно в определенных обстоятельствах, потому что он возвращает неверный ViewController, если был использован.setRoot или если использовался только.pop, тогда как navCtrl.getActive(), похоже, возвращает правильный ViewController, если был использован.push,

Используйте viewController, испускаемый viewDidEnter Observable, вместо использования navCtrl.getActive(), чтобы получить правильный активный ViewController, например:

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

Я тестировал это внутри подписки viewDidEnter, не знаю о других событиях жизненного цикла.

Ответ 6

Старый пост. Но это то, как я получаю текущее имя страницы как в dev, так и в prod

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

Ответ 7

Вы можете использовать getActive чтобы активировать ViewController. У component ViewController есть component и его экземпляр текущего представления. Проблема заключается в методе сравнения. Я подошел к решению с настройками некоторого поля, например id:string для всех моих компонентов страницы, а затем сравнил их. К сожалению, простое имя функции проверки, так что getActive().component.name Component.name будет прерван после минимизации.