Как получить текущую страницу от навигации в ионной 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 будет прерван после минимизации.