Ionic-framework: Ionic2 - nav.setRoot(Component) - Ne fonctionne que la première fois, impossible de naviguer ensuite, aucune erreur signalée

Créé le 18 mars 2016  ·  100Commentaires  ·  Source: ionic-team/ionic-framework

Brève description du problème :

Je développe une application avec Ionic2. J'ai App.ts en tant que parent, Welcome.ts en tant que page enfant et Featured.ts en tant que page enfant également. J'ai Firebase intégré à l'application. Rootpage est d'abord défini sur Welcome.

this.rootPage = Welcome;

Étape 1 : Je clique sur un bouton sur Bienvenue pour m'authentifier auprès de Google, une fois que l'onAuth est appelé, je mets this.nav.setRoot(Featured); Tout fonctionne bien jusqu'à présent. J'arrive à la page En vedette qui active un menu latéral avec différentes pages et je peux naviguer vers chacune d'elles sans problème.

Étape 2 : Featured active un menu latéral à partir d'App.ts/html, j'y ai un bouton de déconnexion qui appelle unauth.
Unauth effectue un certain Firebase Unauth, puis :

this.menu.close();    
let nav = this.app.getComponent('nav');    
nav.setRoot(Welcome); 

Étape 3 : Connectez-vous à nouveau comme à l'étape 1. Tout va bien jusqu'à présent.

Étape 4 : Ouvrez le menu latéral, sélectionnez l'une des pages du menu latéral, la navigation ne se produit pas. le menu latéral se ferme mais la page reste la même, le bouton de l'icône de la barre de navigation disparaît et aucune navigation ne se produit.
code d'ouverture de page :

  openPage(page) {
    //1. Loop through and set active attribute to False if it doesn't match.
    //   Set to True if it matches page title
    for(var i = 0; i < this.NavPages.length; i++) {
      if(this.NavPages[i].title == page.title) this.NavPages[i].active = true;
      else this.NavPages[i].active = false;
    }
    for(var i = 0; i < this.ActivityPages.length; i++) {
      if(this.ActivityPages[i].title == page.title) this.ActivityPages[i].active = true;
      else this.ActivityPages[i].active = false;
    }
    for(var i = 0; i < this.PreferencesPages.length; i++) {
      if(this.PreferencesPages[i].title == page.title) this.PreferencesPages[i].active = true;
      else this.PreferencesPages[i].active = false;
    }

    //2. close the menu when clicking a link from the menu
    this.menu.close();
    //3. navigate to the new page if it is not the current page
    let nav = this.app.getComponent('nav');
    nav.setRoot(page.component);
  }

Quel comportement attendez-vous ?

Je m'attends à ce que la navigation continue de se produire, comme ce qui se passe à l'étape 1.

Étapes à reproduire :
Étapes à reproduire incluses ci-dessus.

Code included above.

Autres informations : (par exemple, les traces de pile, les problèmes connexes, les suggestions de résolution, les liens de débordement de pile, les liens de forum, etc.)
Aucune erreur n'est lancée malheureusement. Je ne vois aucune erreur dans les journaux de la console.

Quelle version ionique ? 2.x

Exécutez ionic info partir de l'invite du terminal/cmd : (collez la sortie ci-dessous)

Your system information:

Cordova CLI: 6.0.0
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Version: 2.0.0-beta.3
Ionic CLI Version: 2.0.0-beta.19
Ionic App Lib Version: 2.0.0-beta.9
ios-deploy version: 1.8.2 
ios-sim version: 5.0.3 
OS: Mac OS X El Capitan
Node Version: v0.12.7
Xcode version: Xcode 7.2.1 Build version 7C1002 

Merci.

reply

Commentaire le plus utile

Pourquoi ce problème est-il clos ? La navigation semble vraiment cassée. Si je pousse une page avec des formulaires, cela ne fonctionnera pas non plus.

Tous les 100 commentaires

J'ai remarqué ce qui suit : 2 pages ioniques sont présentes à la fois dans le dom.
screen shot 2016-03-18 at 3 34 03 pm

Celui vers lequel j'ai navigué est "explorer" qui a un z-index (92) inférieur à la page "en vedette". Par conséquent, je devrais être en exploration, mais le "vedette" est superposé à "explorer" avec un z-index de 93.

Je rencontre le même problème mais dans mon cas, je ne peux même pas être redirigé après la connexion.

Si je suis déjà connecté et que j'atterris dans la vue de connexion, nav.setRoot(TabsPage) est parfaitement exécuté.

Mais si je me connecte avec Facebook après avoir obtenu le profil utilisateur nav.setRoot(TabsPage) ne fait rien. De plus, nav.push(TabsPage) ne fait rien non plus, mais si je fais nav.push(Main) où Main est l'un de mes onglets, s'exécute correctement, mais je n'ai pas de barre de tabulation et un bouton de retour apparaît, évidemment.

De plus, si je fais nav.setRoot(Main) , cela fonctionne correctement, mais j'atterris dans un onglet sans barre de tabulation et avec un bouton de retour.

J'ajoute quelques informations. J'ai vu dans la documentation que setRoot renvoie une promesse, alors j'ai fait ceci :

this.nav.setRoot(TabsPage)
  .then(data => {
      console.log(data);
  }, (error) => {
      console.log(error);
  })

Cela lance true lorsque j'arrive sur la page de connexion et que je suis déjà connecté, mais ne lance rien lorsque je me connecte avec Facebook, il semble donc que la promesse ne soit jamais résolue.

Bon, une autre mise à jour. Si vous allez au cœur de Ionic2 vers components/nav/nav-controller.js dans la fonction setPages qui est appelée depuis setRoot, le rappel de la transition n'est jamais exécuté.
Si vous suivez le flux des fonctions appelées : setRoot -> setPages -> _transition -> _render -> _postRender

Dans la fonction _render :

this.loadPage(enteringView, null, opts, function () {
    if (enteringView.onReady) {
        // this entering view needs to wait for it to be ready
        // this is used by Tabs to wait for the first page of
        // the first selected tab to be loaded
        enteringView.onReady(function () {
            enteringView.loaded();
            _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
        });
    }
    else {
        enteringView.loaded();
        _this._postRender(transId, enteringView, leavingView, isAlreadyTransitioning, opts, done);
    }
});

Mon code entre dans enteringView.onReady et le rappel n'est jamais exécuté.

Si j'appelle simplement la méthode _postRender avant d'attendre enteringView.onReady , mon application fonctionne bien, mais c'est tellement sale.
Le problème semble être d'attendre que la page de l'onglet soit prête. Je pense qu'il ne se prépare jamais ou n'acquiert jamais l'état prêt.

Cela pourrait-il être quelque chose avec mon code? Ou est susceptible d'être un bug?

Merci!

J'ai le même problème avec Google ou Facebook auth

@privetr cela semble avoir été corrigé avec beta4. Peux tu vérifier s'il te plaît ? Le mien fonctionne bien maintenant.

@jorchg Pouvez-vous également vérifier ? quand tu en as l'occasion :)

Bonjour à tous! Comme il semble que cela ait été corrigé dans la version bêta.4, je vais fermer ce problème, mais si vous rencontrez toujours ce problème, n'hésitez pas à commenter !

J'ai toujours ce problème. Je n'arrive pas à faire en sorte que la navigation pousse ou setRoot sur ma TabsPage après une promesse de connexion Facebook.

Cordova CLI: 6.1.1
Gulp version:  CLI version 1.2.1
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-beta.4
Ionic CLI Version: 2.0.0-beta.24
Ionic App Lib Version: 2.0.0-beta.14
ios-deploy version: 1.8.5
ios-sim version: 5.0.8
OS: Mac OS X El Capitan
Node Version: v5.9.1
Xcode version: Xcode 7.3 Build version 7D175

Je vis également la situation où si j'appelle nav.setRoot(x), la nouvelle page n'apparaît pas réellement. Pourtant, si je mets au point un champ de saisie dans la page en cours, il disparaît et affiche la bonne page.

De plus, si je pousse sur la pile au lieu de setRoot, l'animation ne se produit pas tant que je ne me concentre pas sur un champ de saisie.

Même problème.

Edit : Je viens de remplacer la navigation de mon application par un menu latéral et tout fonctionne correctement. Les onglets sont donc bouchés à partir de la bêta 4 pour info.

@daveshirman utilisez-vous des onglets pour naviguer ? Cela pourrait être lié aux onglets, mon problème était lié au menu latéral. Cependant, ils utilisent tous les deux le navcontroller, je ne sais pas pourquoi cela fonctionnerait pour moi et pas pour vous. Peut-être produire un plunker ou ouvrir un nouveau problème et l'équipe ionique pourra vous aider.

J'avais le même problème : nav.setRoot(MyComponent) ne semblait rien faire. J'exécutais l'application sous Android en utilisant --live-reload , et il y avait des avertissements concernant certains événements qui n'étaient pas déclenchés :

0     195445   log      deviceready has not fired after 5 seconds.
1     195457   log      Channel not fired: onDOMContentLoaded

Je n'ai pas non plus pu tester le code dans le navigateur car il s'agit d'afficher une certaine page lorsque l'appareil se déconnecte.

J'ai donc finalement essayé d'exécuter mon code sous Android, mais sans le rechargement en direct, et cela fonctionne bien.

Donc, il y a quelque chose dans le mode de rechargement en direct qui l'empêche de fonctionner. En utilisant Beta4 comme dépendance et la version CLI 2.0.0-beta25.

Je rencontre toujours le problème que j'ai décrit. J'ai complètement oublié, et après une mise à jour ionique, il a cessé de fonctionner, alors je l'ai juste modifié à nouveau comme décrit dans mon dernier message dans ce fil.

Dois-je ouvrir un autre sujet ?

Salut à tous. Quelqu'un a-t-il trouvé une solution à cela? J'utilise actuellement Ionic [email protected] et le problème est toujours présent !

J'ai trouvé que la cause de mon problème appelait .pop() alors que seul setRoot avait été appelé.

J'ai trouvé que l'appeler depuis mon app.ts semble fonctionner de manière fiable. L'appeler à partir de n'importe quelle autre page semble échouer.
De plus, si je ne suis pas sur une page racine, comme 3 pages de profondeur, j'appelle également nav.popToRoot() après la méthode setRoot, qui fonctionne :

this.nav.setRoot(xxxx).then(() =>{
    this.nav.popToRoot();
    //....
});

Pourquoi ce problème est-il clos ? La navigation semble vraiment cassée. Si je pousse une page avec des formulaires, cela ne fonctionnera pas non plus.

Se casse également lorsqu'une fenêtre modale s'affiche également.
Le 13 juillet 2016 à 3 h 59, "scorpnode" [email protected] a écrit :

Pourquoi ce problème est-il clos ? La navigation semble vraiment cassée. Si je pousse une page
avec des formulaires, cela ne fonctionnera pas non plus.


Vous recevez ceci parce que vous avez été mentionné.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198,
ou couper le fil
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

Salut, cela se produit toujours pour moi dans 2.0.0-beta.10. J'obtiens un écran vide après avoir appelé NavController.setRoot. Apparaissant uniquement sur les appareils iOS

Info appareil:

  • modèle : iPad5,4
  • Version iOS : 8.3

Je suis confronté à ce problème dans 2.0.0-beta.10 . Je ne parviens pas à accéder à la page suivante par NavController.setRoot. Mon code ressemble à ceci :

this.nav.setRoot(somepage).then(() =>{
     this.nav.popToRoot();
});

Info appareil:

  • modèle: motorala x jouer
  • version Android : 6

CLI v2.0.0-bêta.32.

Toujours des problèmes avec
this.nav.setRoot(ListPage)
de hello-ionic.ts de l'application du didacticiel de démarrage.

Je voulais essayer la connexion FB qui a été simplifiée avec la v2.

Quelqu'un d'autre?

[Éditer]
j'utilisais
import {Nav} from 'ionic-angular';
à la place de
import {NavController} from 'ionic-angular ' ;

Résolu mon problème. J'espère que cela aide quelqu'un

Même problème ici !
Y a-t-il un correctif pour l'instant ?

Bonjour à tous, si quelqu'un pouvait fournir un plunker qui démontre ce problème, ce serait génial. Merci d'avoir utilisé Ionic !

Bonjour à tous! Comme il semble que cela fait un moment qu'il n'y a pas eu d'activité sur ce problème, je vais le fermer pour l'instant. N'hésitez pas à commenter si vous rencontrez toujours ce problème. Merci d'avoir utilisé Ionic !

Désolé de ne pas avoir répondu, j'étais en vacances 💃

Mon problème semble avoir été lié à cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4

Lorsque j'ai mis à jour mon projet vers beta.10 et que j'ai commencé à utiliser le wrapper Facebook de ionic-native, le problème s'est simplement arrêté. Très étrange, compte tenu du fait que le wrapper utilise le même plugin.

Merci beaucoup!

Pas de problème, content que ce soit réglé pour vous !

Salut @jgw96 ! Malheureusement, cela semble toujours être un problème pour moi dans la bêta 10. Vous pouvez le voir dans le plnkr ci-dessous. En effet, j'ai un modal de connexion qui définit la racine sur une page "Tabs" une fois connecté avec succès. À partir d'une page dans les "Tabs", j'ai un bouton "Déconnexion", qui déclenche un événement qui est consommé dans app.ts. Dans app.ts, j'essaie de définir la racine sur "LoginPage", mais rien ne semble se produire. En regardant le DOM tout en cliquant sur "déconnexion", je peux voir les choses se déclencher, et la page de connexion existe sous les onglets, mais la navigation ne semble tout simplement pas se produire. Des idées?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

Merci pour votre temps!

J'ai déposé un nouveau numéro pour ce #7593. Applicable à 2.0.0-beta.10 et 11, éventuellement à d'autres.

J'ai le même problème avec la beta 11.
La navigation semble bien fonctionner jusqu'à ce que this.nav.setRoot(xxx) soit appelé. Après cela, la navigation fonctionne aléatoirement... Lorsque l'on pousse une nouvelle page, parfois rien ne se passe : la vue reste sur la page courante au lieu de la nouvelle. Lors de l'affichage, la navigation semble parfois apparaître deux fois.
Tout semble être correct avec l'objet NavController et tout se déclenche normalement. Mais il semble qu'il y ait confusion dans le DOM : les valeurs des propriétés z-index pour les balises ion-page sont erronées dans ces cas, de sorte que la mauvaise page reste au-dessus.

Je vois exactement le même comportement que @Troknus concernant le popping de double page et la confusion DOM.

Également la première fois setRoot, puis lors de la prochaine navigation, la page racine initiale clignote, comme si elle n'avait pas été complètement déchargée auparavant.

J'ai aussi le problème @Troknus J'essaie d'ajouter manuellement la classe show-page et la fonction mais ce n'est pas une bonne solution.

Je cherche sur tous les sites mais rien. J'essaie toutes les solutions possibles mais tout est en vain.

en beta 10. La navigation fonctionne parfaitement. Pourquoi pas en bêta 11.

Je vois aussi le même comportement que @Troknus .

Les gars, ayant le même problème que @jorchg l' a dit.

après la connexion, si j'essaie de pousser vers la vue des onglets mais que je ne travaille pas .. si je pousse vers une page qui est censée être dans un onglet .. ça marche .. voici le projet

J'ai le même problème que @Troknus

@schaergeek mis à jour vers la bêta 11 et cela a fonctionné .. voici l'exemple https://github.com/mariohmol/ionic2-meteor-messenger-password

J'ai levé le pouce sur Troknus, mais je pense qu'un message est plus clair.

Cette navigation est un vrai problème.
Nous (et je suppose que beaucoup d'autres personnes) ne sommes pas autorisés à passer en production avec ce bogue.
(Nous travaillons en beta 11 en tant que Troknus et nous avons le même...).

J'ai jeté un œil au plnkr de @joshgarwood. La publication d'événements semble être le problème ? Si au lieu de publier l'événement d'authentification pour que MyApp fasse le travail, vous définissez plutôt la racine via l'instance NavController dans TabPage, cela fonctionne. Essayer de définir la racine via l'écouteur d'événement dans MyApp ne fonctionne pas. Il me semble donc qu'il s'agit d'un problème avec les différentes instances de NavController qui sont injectées... ? Je ne sais pas comment le DI est censé fonctionner ici, mais j'ai l'impression que le consommateur ne devrait pas avoir à se soucier de l'instance de NavController qui est injectée. Si j'appelle setRoot(*), les choses devraient fonctionner, n'est-ce pas ?

En ce qui concerne le problème d'index Z dont parle @Troknus , vous pourriez tous être intéressés par le numéro 8042. Bien que dans ce cas, setRoot(*) ne soit pas appelé du tout.

En fait, je viens de lire le commentaire de @ jgw96 et il semble que vous n'êtes pas censé utiliser des instances NavController aléatoires... ?

Pourtant, cela ne change rien au fait qu'il y a un bogue avec les indices Z.

même problème ici avec beta11...

Quelqu'un a-t-il un plnkr différent qui reproduira la confusion du DOM ou le scintillement des pages ? Le plnkr de @joshgarwood n'inclut pas les poussées ou les pops.

@rcjsuen Avait le même problème dans Beta10 et Beta11, j'ai trouvé cette solution de contournement. Je ne sais pas si setRoot fonctionne comme prévu, mais cela fonctionne pour le moment.

Ca ne fonctionne pas

  private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.nav.setRoot(TabsPage);
        } else {
          this.nav.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }
}

Travail

 private initializeApp(): void {
    this.platform.ready().then(() => {

      firebase.auth().onAuthStateChanged(user => {
        if (user) {
          this.setRoot(TabsPage);
        } else {
          this.setRoot(LoginPage);
        }
      });

      StatusBar.styleDefault();
    });
  }

  private setRoot(newRootPage: any){
    this.rootPage = newRootPage;
  }
}

@Vanclief J'ai le même problème - mais même cette solution que vous avez proposée n'a pas fonctionné pour moi.
Mon code était comme le vôtre pour commencer - puis j'ai essayé de passer à ionic 2 rc0 et angular 2.0.1, mais cela ne fonctionnait pas bien avec firebase (ni angularfire), alors je suis revenu à:

{
    "@angular/common": "2.0.0-rc.4",
    "@angular/compiler": "2.0.0-rc.4",
    "@angular/core": "2.0.0-rc.4",
    "@angular/forms": "^0.2.0",
    "@angular/http": "2.0.0-rc.4",
    "@angular/platform-browser": "2.0.0-rc.4",
    "@angular/platform-browser-dynamic": "2.0.0-rc.4",
    "@angular/router": "^2.0.0-rc.2",
    "firebase": "^3.3.0",
    "ionic-angular": "2.0.0-beta.11",
    "ionic-native": "1.2.2"
}

node_modules/ did npm install et maintenant je suis confronté à ce problème.

Le plus étrange, c'est que si je définis this.rootPage sur quelque chose en dehors de la fonction de rappel, l'application accède à cette page. Par exemple

        this.setRoot(TeamPage);

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

Naviguera l'utilisateur dans la page d'équipe, puis naviguera l'utilisateur vers la page de connexion (dans les cas où l'utilisateur n'est pas connecté)

pourtant

        firebase.initializeApp(this.firebaseConfig);
        firebase.auth().onAuthStateChanged(user => {
            if (user) {
                this.setRoot(TeamPage); // If there's a user take him to the Teams page.
            } else {
                this.setRoot(LoginPage);  // If there's no user logged in send him to the LoginPage
            }
        });

Ne dirigera jamais l'utilisateur n'importe où

@Peter-Piper

Je n'ai pas mis à jour, mais j'ai continué à avoir des problèmes qui ont disparu une fois que j'ai mis à niveau vers RC0. Pour l'un de mes projets, j'utilise également Firebase et j'ai eu quelques problèmes de mise à jour, mais maintenant tout fonctionne.

Je n'utilise pas AngularFire, mais ce tutoriel le couvre : https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

EDIT: Voici un exemple rapide que j'ai fait

@Vanclief

Merci, j'ai déjà essayé cette approche - et cela a fonctionné. Mais le fait que je doive faire des hacks dans un module de nœud combiné avec le crash ionique RC_0 lors de la visualisation de fichiers lors de l'exécution de ionic serve m'a fait abandonner la mise à niveau et m'en tenir à l'ancienne version.

Quoi qu'il en soit, j'ai résolu le problème mentionné ci-dessus où la définition de la page racine dans un rappel ne fonctionne jamais à moins qu'elle n'ait été définie auparavant, en vérifiant si firbase.auth.currentUser est défini, puis en définissant la rootPage

        const page = firebase.auth().currentUser ? TeamPage : LoginPage;
        this.setRoot(page);

        firebase.auth().onAuthStateChanged(user => {
            // If there's a user take him to the Teams page otherwise send him to LoginPage
            const page = user ? TeamPage : LoginPage;
            this.setRoot(page);
        });

puis en vérifiant la méthode setRoot afin qu'elle ne navigue pas deux fois sur la même page.

C'est aussi un hack et ne résout pas le problème sous-jacent. Malheureusement, je n'ai pas le temps de faire une enquête approfondie sur le problème la semaine prochaine.

C'est toujours un problème. L'utilisation de this.nav.push(...) fonctionne bien, mais l'utilisation de this.nav.setRoot(...) ne fonctionne pas après la première fois. Voici mes infos ioniques :

Your system information:

Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.1
Gulp local:  
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.1.0-beta.1
OS: Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS 
Node Version: v4.6.0

De package.json

  "dependencies": {
    "@ionic/storage": "^1.0.3",
    "firebase": "^3.4.1",
    "ionic-angular": "^2.0.0-rc.0",
    "ionic-native": "^2.2.2",
    "ionicons": "^3.0.0"
  },

@jgw96 Pourquoi est-ce fermé ? Il s'agit clairement d'un cas ouvert car setRoot ne fonctionne pas correctement.

@daveshirman , j'étais confronté au même problème, ce n'est pas un problème de navigation, mais voici comment je l'ai résolu.

dans mon app.ts est avoir ceci

firebase.initializeApp(config);

platform.ready().then(() => {
  firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      // If there's a user take him to the TabsPage page.
      this.rootPage = TabsPage;
    } else {
      // If there's no user logged in send him to the LoginPage
      this.rootPage = LoginPage;
    }
  });
  // Okay, so the platform is ready and our plugins are available.
  // Here you can do any higher level native things you might need.
  StatusBar.styleDefault();
});

l'instruction if ci-dessus dit // S'il y a un utilisateur SET THE ROOTPAGE TO TabsPage page.
et sinon, il devrait rester dans la LoginPage, vous noterez que si vous utilisez la méthode de connexion Firebase normale, la partie if s'exécutera (c'est-à-dire qu'elle naviguera vers la rootPage, mais lors de l'utilisation de Facebook, la partie else s'exécutera (c'est-à-dire qu'elle reste sur le Page de connexion

Je l'ai résolu comme ça.
Identifiant Facebook() {

// se connecter à facebook
Facebook.login(['email']).then((result=>{
// définir les informations d'identification, vous les utiliserez pour vous connecter à firebase
laissez les informations d'identification = firebase.auth.FacebookAuthProvider 'informations d'identification'
// connectez-vous à firebase, c'est ce qui empêche la navigation de fonctionner, menant au chemin ELSE de la // déclaration dans l'app.ts à exécuter
return firebase.auth().signInWithCredential(informations d'identification);
})).then((utilisateur)=>{
//alerte(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth().currentUser.uid).set({
id:firebase.auth().currentUser.uid,
email : utilisateur.email,
displayName:user.displayName,
profilePictureURL:user.photoURL
});

   this.navCtrl.setRoot(TabsPage);
}).catch((error)=>{
  alert(error);
})

}

ce qui s'est passé dans le code ci-dessus est que,
1er vous devez vous connecter à facebook, ce que j'ai fait avec
Facebook.login(['email']).then((result=>

2ème, vous devez définir des informations d'identification qui vous aideront à vous connecter à la base de feu à l'aide de l'accessToken qui vous a été envoyé par le résultat de connexion Facebook, ce que j'ai fait ici
laissez les informations d'identification = firebase.auth.FacebookAuthProvider 'informations d'identification' ;
3ème, vous devez vous connecter à Firebase avec les informations d'identification que vous avez définies, c'est ce que j'ai fait ici
return firebase.auth().signInWithCredential(informations d'identification);
REMARQUE: c'est la raison exacte pour laquelle votre this.navCtrl.setRoot(TabsPage); n'a pas fonctionné (car l'utilisateur ne s'est pas encore connecté sur firebase.

vous pouvez donc maintenant accéder au rootPath au chemin then() du code.

et veuillez vous assurer que votre appId facebook et appSecrete sont configurés sur firebase> authentification> panneau facebook.

ESPÉRONS CETTE AIDE

@OyebisiJemil Merci pour votre longue explication de ce que vous avez fait. Mais je voulais dire que j'avais le même problème conceptuellement dans ce setRoot ne fonctionne pas correctement, pas avec l'utilisation de Facebook ou quoi que ce soit. Merci encore cependant. Ce problème ne doit pas être fermé, à moins qu'il n'y en ait un autre ouvert avec la même description.

Ce qu'il y a apparemment :

https://github.com/driftyco/ionic/issues/8453

Je rencontre également ce problème dans des circonstances très similaires. Dans mon cas, le passage à push(view) au lieu de setRoot(view) a résolu le problème et ne correspond pas vraiment au flux de mon application.

J'ai le même problème. nav.push(view) fonctionne bien mais nav.setRoot ne fonctionne pas. Quelqu'un a des suggestions?

Je suis toujours confronté au même problème à ce jour dans la dernière version:

Se déconnecter() {
this.authData.logoutUser().then(() => {
this.nav.setRoot(LoginPage);
});
}

ne marche pas. Aide svp. Merci. Lis

Utilisez push au lieu de setRoot...

@jgw96 , @adamdbradley c'est toujours un problème majeur. Veuillez le rouvrir et lui attribuer un jalon. Beaucoup de gens ont ce problème, y compris moi-même et c'est une fonctionnalité essentielle pour une application.

@dejanncelj ce n'est pas une solution à ce problème.

@lisaiceland pour contourner ce problème j'ai suivi cette suggestion :
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@niallr12 @daveshirman est-ce toujours un problème dans RC3 ?

@manucorporat Je ne sais pas s'il s'agit d'un problème dans RC3 mais je ne vois pas de solution dans le journal des modifications. Je suis satisfait de ma solution et je pense que c'est de toute façon une meilleure approche.

Je peux tester pour vous en RC3 si vous le souhaitez.

@ niallr12 eh bien, je n'ai jamais pu reproduire ce problème particulier. Mais j'ai passé des semaines à durcir NavController, avec des tonnes de petites corrections et de tests. Comme celui-ci : Worst Case qui stresse la navigation stack avec un flow fou.

Je serais très utile si vous pouviez tester ce bogue contre RC3.

@manucorporat Je peux toujours reproduire le problème dans rc3. Dans mon cas particulier, il ne semble pas rejeter la vue actuelle lorsque je mets root. Si je ferme la vue actuelle et que je mets la racine, cela fonctionne bien. Pousser la vue fonctionne très bien.

Hey,

Je ne sais pas si ma réponse aidera quelqu'un puisque je n'ai pas lu tous les messages précédents, mais lorsque j'ai rencontré un tel problème dans mon projet, je l'ai résolu en me référant à la pile de navigation parente, pour cette raison j'ai pu revenir à page d'accueil, par exemple :

Page d'accueil (page racine)

gotoFeature(): void {
  this.navCtrl.push(feature);
}

Page de fonctionnalité ( avec onglets )

logout(): void {
  this.navCtrl.parent.parent.pop() //  back to welcome
}

Il doit être géré de cette manière puisque les onglets ont leur propre pile de navigation, ce qui signifie que chaque utilisation de setRoot au niveau de l'objet de navigation des onglets redirigera vers une page différente, mais le bloc d'onglets dans le pied de page sera toujours visible.

Pourquoi ce problème est-il clos ? J'ai le même problème. J'utilise la fonction setRoot dans mon exemple de fournisseur. App setRoot et page modifiée mais la navigation (menu) est désactivée lorsque vous avez terminé.

C'est mon code dans le fournisseur

private _leaveGroup(user: modelUser, room: modelRoom): Promise<any> {
    return new Promise((resolve, reject) => {
      let loading = this.loadingCtrl.create({dismissOnPageChange: false});
      loading.present();

      this.ref.child(room.id).child('users').child(user.id).remove()
        .then(() => this.navCtrl.setRoot(PageDashboard))
        .then(() => loading.dismiss())
        .then(() => resolve())
        .catch(err => loading.dismiss().then(() => reject(err)));
    });
}

c'est mes infos

CLI de Cordoue : 6.3.1
Version du cadre ionique : 2.0.0-rc.3
Version CLI ionique : 2.1.4
Version de la bibliothèque d'applications ioniques : 2.1.2
Version des scripts d'application ioniques : 0.0.45
version de déploiement ios : 1.9.0
version ios-sim : 5.0.9
Système d'exploitation : Mac OS X Sierra
Version du nœud : v6.9.1
Version Xcode : Xcode 8.1 version 8B62

J'ai eu le même problème. Cependant, après m'être assuré qu'à tout moment, si seule l'instruction setrroot était exécutée, tout fonctionnait parfaitement. Mais pour diverses raisons, si plusieurs instructions setroot sont exécutées à un moment donné, c'est-à-dire avant le rendu, Ionic crée plusieurs pages en raison desquelles la navigation est bloquée dans mon cas.

Il semble que ce problème soit muté en quelque chose d'étranger dans RC4. Même type de problème sauf que lors de la définition de la racine maintenant à partir de la page de connexion de l'exemple vers un menu/tableau de bord, la page de connexion reste dans la pile de vues qui affiche le bouton de retour dans l'en-tête, provoquant toutes sortes de chaos

Je suis obligé de faire un location.reload pour tenir compte de cela, ce qui, je suppose, n'est pas une expérience utilisateur terrible car cela ne se produit que lors de l'enregistrement d'un nouvel utilisateur, mais quand même... les gens ont toujours le problème.

Je crée un événement pour la déconnexion.

// app.component.ts
events.subscribe('logout', () => {
  localStorage.removeItem('token');
  this.rootPage = LoginPage;
 });

maintenant déconnectez-vous :

// pages/home/home.ts
  logout() {
    this.events.publish('logout');
  }

Salut à tous. Quelqu'un a-t-il trouvé une solution à cela? J'utilise actuellement Ionic 2.0.0-rc.4 et le problème est toujours présent !

Salut,

//importer ces classes
 import { Component, ViewChild } from '@angular/core' ;
 import { Platform, MenuController, Nav } from 'ionic-angular' ;

 classe d'exportation MonApp {
 //Définir cette propriété
 @ViewChild(Nav) nav : Nav ;

 // implémente cette méthode, et fonctionne parfaitement
 openPage privée (page : n'importe laquelle) : n'importe quelle {
 //valider le jeton 
 this.loggedIn = this.service.canActivate();
 si (!this.loggedIn) {
 // non connecté 
 this.nav.setRoot(LoginPage);
 } autre {
 // connecté
 this.nav.setRoot(HomePage);
 }
 this.menuCtrl.close();
 }

Câlins!

Mon application : https://github.com/siteslave/chiangmai-demo-app/blob/master/src/pages/main/main.ts#L96 -L100

import {
  ...
  App,
  ...
} from 'ionic-angular';

//=====================//
 logout() {
    localStorage.removeItem('token');
    let nav = this.app.getRootNav(); 
    nav.setRoot(LoginPage);
  }

Quelqu'un a-t-il trouvé au moins une solution de contournement à cela?

Même problème que @joshuaohana.

Si je fais setRoot AVANT la connexion à Facebook, tout fonctionne comme prévu.
Si je fais setRoot APRÈS facebook, j'obtiens le même comportement que @joshuaohana.

Merci.

(Je viens de trouver ce doublon : https://github.com/driftyco/ionic/issues/6297)

créer un événement pour les travaux de déconnexion.

également, trouvez ci-dessous une explication détaillée sur la navigation avec une autre solution de travail

https://webcake.co/exploring-nav-hierarchy-in-the-ionic-2-tabs-page/

morceau le plus précieux du code collé ci-dessous.

importer {App} à partir de 'ionic-angular' ;
...
constructeur (application privée : application) {}

Se déconnecter() {
...

    // Now I'll access the root NavController for the app,
    // and use that to reset the nav stack

    const root = this._app.getRootNav();
    root.popToRoot();

    // since I only have two items in the root NavController,
    // I could also have run root.pop() instead

}
...

Peut-être que certains d'entre vous ont fait la même erreur que moi :

J'ai utilisé la navigation via "setRoot" mais j'ai manqué qu'en même temps la liaison "[root]=.." soit toujours disponible sur le modèle HTML. Le fait de synchroniser à nouveau les deux informations a résolu mon problème. Dans ce cas, j'ai supprimé la liaison de modèle et géré la racine uniquement via l'API.

Cordialement, Michel

Salut les gars,

La solution @ly-dev a fonctionné pour moi. Je viens de faire this._app.getRootNav().setRoot(EntryPage); et ça marche.

Tout d'abord, importez Nav depuis ionic-angular, au même endroit que navController
import { App, NavController } from 'ionic-angular';

puis fournissez-le dans votre constructeur:
constructor(public navCtrl: NavController, public appCtrl: App)

maintenant vous pouvez accéder au rootnav :
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojary Cette solution n'a pas fonctionné. Lorsque l'utilisateur accède à plusieurs onglets.

Exemple : onglet Accueil avec plusieurs pages. Lorsque l'utilisateur clique sur plusieurs pages. Ensuite, ne revient pas mais passe à l'onglet Compte, puis se déconnecte, il restera dans l'onglet Compte jusqu'à l'actualisation.

J'ai compris que si l'utilisateur clique sur l'onglet Accueil et ne va pas plus loin, il se déconnectera correctement.

Je pense qu'il s'agit d'accéder à de nombreux onglets dans le dom & getRootNav ne remonte pas si loin lorsque l'utilisateur accède à la deuxième page de l'onglet d'accueil.

C'est toujours un problème.

Oui, toujours un problème pour moi car j'utilise Tab's comme page de destination principale de l'application. En appelant _navCtrl.setRoot() à partir de l'une des pages à l'intérieur du tabComponent, seule cette page est définie sur rootPage mais l'interface de l'onglet en bas reste en place. Cela me permet d'accéder encore à d'autres pages de l'onglet !

image

La bonne solution à cela est:

let _nav = this.app.getRootNav(); _nav.setRoot(LoginPage);

ou une ligne

this.app.getRootNav().setRoot(LoginPage);

J'ai également un problème similaire sur ma nouvelle application, mon application ne fonctionne que pour la première fois sur l'appareil, où j'établis une connexion socket et effectue une communication socket. Je tue l'application, me déconnecte de mon ordinateur de développement, relance l'application, je n'ai vu aucune activité de connectivité côté serveur. Je n'ai pas mis en œuvre la recommandation uiktiomasfeliz, je vais essayer cela plus tard dans la journée. Mais juste un avertissement.

Oui. J'ai aussi fait la même chose avec :

this.app.getRootNav().setRoot(SetupPage);

Cependant, cela casse les chemins des images sur les appareils...

(getRootNav) est obsolète et sera supprimé dans la prochaine version majeure. Utilisez plutôt getRootNavById.

Donc... cette erreur n'a jamais été corrigée et le patch précédent ne fonctionne plus... :/

this.app.getRootNav().setRoot(LoginPage);

Cela ne me réveille pas...

cela a été résolu avec la version 3.5.3 pour moi au moins

welp, 3.5.3 ne l'a pas corrigé pour moi.

les gars et ayant toujours ce problème, la barre latérale ne fonctionne pas après setRoot();

je n'utilise que ceci : this.navCtrl.setRoot(HomePage);

J'ai essayé toutes les solutions ici mais j'ai toujours ce problème
Ionique 3.10.3

j'ai résolu comme ça

importer l'application

import {IonicPage, NavController, Nav, App} à partir de 'ionic-angular' ;

ET maintenant utiliser

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("LoginPage");

Bonjour, je teste l'application hello world sur un iPhone4 et d'autres appareils avec Android.

Dernière version Ionic et CLI.

Le principal gros problème est avec l'iPhone, l'appel à setRoot ne fonctionne pas.

annuler onGoClick(){
// cette ligne NE FAIT RIEN et aucune erreur n'est renvoyée.
this.navCtrl.setRoot(HomePage);

// cette ligne NE FAIT RIEN et aucune erreur n'est renvoyée.
this.app.getRootNav().setRoot(HomePage);
}

cela NE FONCTIONNE PAS non plus

var root = this.appCtrl.getRootNav();
root.setRoot( HomePage );
root.popToRoot();

Cordialement.

Salut @alemdg Je pense que c'est la façon dont vous appelez les routes, par exemple si vous définissez comme un texte ou comme un objet, peu importe,

si vous voulez éviter les problèmes, appelez comme un texte ("HomePage" ) et créez cette variable

const root = this.app.getRootNav();

et appeler la méthode suivante

const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("HomePage");

importer cet objet

import {IonicPage, NavController, NavParams, Nav, App} à partir de 'ionic-angular' ;

constructeur(
application publique : application
) {

le premier est le popToRoot et le second définit la nouvelle racine ;)

annuler onGoClick(){
// cette ligne NE FAIT RIEN et aucune erreur n'est renvoyée.
this.navCtrl.setRoot( "HomePage" );

// cette ligne NE FAIT RIEN et aucune erreur n'est renvoyée.
root.popToRoot();
root.setRoot( "HomePage" );
}

cela NE FONCTIONNE PAS non plus

const root = this.appCtrl.getRootNav();
root.popToRoot();
root.setRoot( "HomePage" );

@spidermay Merci pour la réponse mais ça ne marche toujours pas.

j'ai importé
import {IonicPage, NavController, NavParams, Nav, App} à partir de 'ionic-angular' ;

et exécuté
const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("HomePage");

mais si je clique deux fois sur le bouton ça marche...

c'est comme si un rafraichissement manquait....

Je vois cela sur 3.7.1.

Utilisez le code suivant, il doit fonctionner ou vous donner un message d'erreur

this.menu.close();
this.nav.setRoot(HomePage).then(()=>{
this.nav.popToRoot();
}).catch(err=>{
alert(err.toString());
});

Bonjour @FatehiAlqadasi , merci.
Une erreur est levée, voici le log.

se tromper:
Fichier C@ :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
réduire@[code natif]
O@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Ie@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
detectChanges@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invoqueTask@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invoqueTask@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
se tromper:
Fichier C@ :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
réduire@[code natif]
O@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:12952
transform@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:8:14339
Ce@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Ie@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:1046
Te@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:518
no@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:5140
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:42:25653
updateRenderer@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:4409
Se@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:328
We@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:3041
Ge@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:336
detectChanges@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:6:5799
_viewAttachToDOM@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:22059
_transition@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:23173
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9288
onInvoke@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1143
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
run@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
file:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invoqueTask@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9972
onInvokeTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:5:1047
invoqueTask@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9900
runTask@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:5153
o@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoquer@fichier :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
dispatchEvent@[code natif]
handleTapPolyfill@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:6423
pointerEnd@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:18:5144
[code natif]
handleTouchEnd@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:19:19943
[code natif]

@tonyawad88
Cela a résolu le problème

logout(){
this.navCtrl.setRoot("LoginPage");
this.navCtrl.push("LoginPage");

}

Bug de 2 ans, toujours personne n'ose le réparer... J'ai le même problème dans Ionic 3

Bonjour à tous,

Je peux également accéder à toutes mes données à partir de la page racine, mais je ne peux pas naviguer dans la page hors des onglets, elle est ouverte comme un enfant d'onglets.

J'ai essayé toutes les possibilités pour le résoudre mais aucune opération ne fonctionne.

Onglet page où mes données.
1st

Après avoir cliqué sur les données récupérées, il sera redirigé vers la page de détail des données, il a été redirigé mais à l'intérieur de la page à onglet. comme ça...

2nd

aide moi,

Merci d'avance.

J'ai remarqué ce bogue à partir de [email protected]. Il semble être associé à DeepLinkConfig, car si je le supprime de mon app.module, je peux appeler nav.setRoot() toute la journée sans problème. Mon hypothèse est que, après les appels ultérieurs de setRoot(), la logique de lien profond entre dans un état où la pile de navigation change avant window.location, le code de lien profond voit que window.location pointe vers une page qui n'est pas sur le pile (parce que vous en avez éloigné setRoot()), et il vous ramène donc à la page dont vous venez d'essayer de vous éloigner.

Quoi qu'il en soit, voici une solution de contournement qui fonctionne pour moi.

await this.nav.push(page, params);
this.nav.remove(0, this.nav.length() - 1);

Merci beaucoup @jknisley ,
J'ai résolu mon problème avec ça.

detailEvent(eventItem) {
    this.app.getRootNav().push(DetailEventsPage, { itemUp: eventItem });  
  }

Ce code me redirigera également vers une nouvelle page et une mise en page différente (pas sous la page à onglet).

Laissons ça ici pour la postérité. Cette fonction de déconnexion semble fonctionner pour moi sans aucun effet secondaire. Merci à @uiktiomasfeliz.

paquets cli : (/usr/local/lib/node_modules)

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

forfaits globaux :

cordova (Cordova CLI) : 7.1.0

forfaits locaux :

@ionic/app-scripts : 3.1.2
Cordova Platforms  : android 6.3.0 ios 4.5.4
Ionic Framework    : ionic-angular 3.9.2

Système:

ios-deploy : 1.9.2
Node       : v8.9.1
npm        : 5.7.1
OS         : macOS High Sierra
Xcode      : Xcode 9.3 Build version 9E145
async logOut() {
    await this.authProvider.logout();
    await this.app.getRootNav().setRoot('LoginPage');
  }

C'est ainsi que j'ai trouvé pour définir une nouvelle pile de navigation et supprimer l'ancienne pile de navigation. Cela a été fait pour ion-angulaire 3.9.2

this.navCtrl.remove(0, this.navCtrl.length() - 1);
this.navCtrl.insert(0, MainPage);
this.navCtrl.pop();

Merci pour le problème ! Ce problème est verrouillé pour empêcher les commentaires qui ne sont pas pertinents pour le problème d'origine. Si le problème persiste avec la dernière version d'Ionic, veuillez créer un nouveau problème et vous assurer que le modèle est entièrement rempli.

Cette page vous a été utile?
0 / 5 - 0 notes