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.
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
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();
}
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);
}
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') {
...
...
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
this.navCtrl.getActive().name != TheComponent.name
Ou this.navCtrl.getActive().component !== TheComponent
est également possible
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 ..