web-dev-qa-db-fra.com

Comment obtenir la page actuelle de Navigation in ionic 2

Je suis nouveau dans Ionic2 et j'essaie de créer des onglets dynamiques basés sur la sélection de menus actuelle. Je me demande simplement comment puis-je obtenir la page actuelle à l'aide du contrôleur de navigation. 

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

D'après la documentation de l'API, je pense que getActiveChildNav() ou getActive() me donnera la page actuelle, mais je n'ai aucune connaissance sur ViewController/Nav

Toute aide serait appréciée. Merci d'avance.

15
amyst

Exemple complet:

import { NavController } from 'ionic-angular';

export class Page {

  constructor(public navCtrl:NavController) {
  }

  (...)

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

Méthode pour obtenir le nom de la page actuelle:

this.navCtrl.getActive().name

Plus de détails ici

30
Rafael Motta

OMG! Ce mec vraiment aidé, des tonnes de mercis! @Deivide Je suis coincé depuis 1 mois, votre réponse m'a sauvé. :)Merci!

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

Mon équipe a dû créer une barre de menus partagée personnalisée séparée, qui serait partagée et affichée avec la plupart des pages. Depuis l'intérieur de ce menu composant.ts, l'appel de this.navCtrl.getActive().name renvoie le nom de la page précédente. Nous avons pu obtenir le nom de la page actuelle dans ce cas en utilisant:

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

Au lieu de 

...
...

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

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

Utilisez ceci

...
...

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

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

Lien source

0
Code Spy

Ancien post. Mais c’est comme cela que j’obtiens le nom de la page actuelle à la fois dans dev et prod

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

this.navCtrl.getActive().name != TheComponent.name Ou this.navCtrl.getActive().component !== TheComponent

est également possible

0
Ahmet Mehmet

navCtrl.getActive () semble être buggy dans certaines circonstances , car il renvoie le mauvais ViewController si .setRoot vient d'être utilisé ou si .pop vient d'être utilisé, alors que navCtrl.getActive () semble renvoyer le ViewController correct .Push a été utilisé.

Utilisez viewController émis par viewDidEnter Observable au lieu de navCtrl.getActive () pour obtenir le ViewController actif correct, comme suit:

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

J'ai testé cela dans l'abonnement à viewDidEnter, je ne connais pas les autres événements du cycle de vie ..

0
Cel