2017-10-16 4 views
3

J'utilise Ionic 2 et j'ai un jeu d'onglets. Chaque onglet maintient sa propre pile de navigation.Comment puis-je changer d'onglet et aller à la racine d'une pile de navigation?

L'utilisateur peut parcourir plusieurs pages dans l'un des onglets, puis changer d'onglet.

Le problème est qu'il existe des interactions dans l'onglet 1 cet effet, le contenu de l'onglet 2. Qu'est-ce que je trouve est que si l'utilisateur fait certaines actions dans un certain ordre, je reçois une erreur:

Runtime Error

Uncaught (in promise): removeView was not found

Je crois que c'est parce que Ionic tente de supprimer une vue qui n'existe plus parce que le contenu a changé.

Dans l'onglet 1, l'utilisateur appuie sur un bouton pour charger l'onglet 2. L'application enregistre la sélection effectuée dans le stockage local, que l'onglet 2 charge ensuite lorsqu'il est sur la page racine. Je sélectionne Tab 2 en utilisant le code suivant:

this.navCtrl.parent.select(1);

Je crois que je peux éviter ce problème en allant à la racine de la pile de navigation lorsque l'onglet est sélectionné, mais comment puis-je faire?

J'ai essayé:

this.navCtrl.parent.select(1); 
this.navCtrl.parent.goToRoot(); 

Mais avec cela, rien ne se passe. L'onglet ne change pas et il n'y a pas d'erreurs. Donc, ma question: Comment puis-je changer un onglet et naviguer vers la racine de la pile de navigation à partir d'un autre onglet?

+0

Vous pouvez définir la racine de l'onglet 1 (this.navCtrl.setRoot (tab1)). Si cela ne fonctionne pas pour vous, veuillez mettre votre code dans Plunker où ce problème peut être reproduit. –

Répondre

0

Pour certaines pages en dehors de la pile de navigation régulière de mon application (ionique 3 avec le chargement paresseux), j'utilise le code suivant, le réglage de la racine (setRoot) avant de naviguer vers la nouvelle page (popToRoot):

this.navCtrl 
    .setRoot('YourPage') 
    .then(() => { 
     this.navCtrl.popToRoot(); 
    }, err => console.log(err)) 
+0

Comment le ferais-je avec mes onglets? Votre code ouvre ma page, mais il le fait dans le navstack actuel, plutôt que sur l'autre onglet. Existe-t-il un moyen de référencer mes onglets et de revenir à la racine? – Mike

+0

Non testé, mais je pense que vous pouvez le faire avec _this.app.getRootNav() _ au lieu de _navCtrl_, comme décrit [ici] (https://stackoverflow.com/a/42601740/5156280). – TGrif