Ionic-framework: Ionic2 - nav.setRoot (Komponente) - Funktioniert nur beim ersten Mal, kann danach nicht navigieren, keine Fehler gemeldet

Erstellt am 18. März 2016  ·  100Kommentare  ·  Quelle: ionic-team/ionic-framework

Kurze Beschreibung des Problems:

Ich entwickle eine App mit Ionic2. Ich habe App.ts als übergeordnete Seite, Welcome.ts als untergeordnete Seite und Featured.ts ebenfalls als untergeordnete Seite. Ich habe Firebase in die App integriert. Rootpage wird zunächst auf Welcome gesetzt.

this.rootPage = Welcome;

Schritt 1: Ich klicke auf eine Schaltfläche auf Willkommen, um mich bei Google zu authentifizieren, sobald onAuth aufgerufen wird, setze ich this.nav.setRoot(Featured); Alles funktioniert bis jetzt gut. Ich komme auf die Featured-Seite, die ein Seitenmenü mit verschiedenen Seiten ermöglicht, und ich kann problemlos zu allen navigieren.

Schritt 2: Featured aktiviert ein Seitenmenü von App.ts/html, dort habe ich eine Abmeldeschaltfläche, die unauth aufruft.
Unauth macht etwas Firebase unauth und dann:

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

Schritt 3: Melden Sie sich erneut wie in Schritt 1 an. Bis jetzt ist alles in Ordnung.

Schritt 4: Öffnen Sie das Seitenmenü, wählen Sie eine der Seiten aus dem Seitenmenü aus, es findet keine Navigation statt. Das Seitenmenü wird geschlossen, aber die Seite bleibt unverändert, die Symbolschaltfläche der Navigationsleiste verschwindet und es findet keine Navigation statt.
openPage-Code:

  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);
  }

Welches Verhalten erwartest du?

Ich gehe davon aus, dass die Navigation fortgesetzt wird, ähnlich wie in Schritt 1.

Schritte zum Reproduzieren:
Schritte zum Reproduzieren oben enthalten.

Code included above.

Sonstige Informationen: (z. B. Stacktraces, verwandte Probleme, Lösungsvorschläge, Stackoverflow-Links, Forenlinks usw.)
Leider wird kein Fehler geworfen. Ich sehe keine Fehler in den Konsolenprotokollen.

Welche Ionic-Version? 2.x

Führen Sie ionic info von der Terminal-/cmd-Eingabeaufforderung aus: (Ausgabe unten einfügen)

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 

Danke schön.

reply

Hilfreichster Kommentar

Warum ist dieses Thema geschlossen? Navigation scheint wirklich kaputt zu sein. Wenn ich eine Seite mit Formularen pushe, funktioniert es auch nicht.

Alle 100 Kommentare

Folgendes ist mir aufgefallen: 2 Ionenseiten sind auf einmal im Dom vorhanden.
screen shot 2016-03-18 at 3 34 03 pm

Die Seite, zu der ich navigiert bin, ist "Explore", die einen niedrigeren Z-Index (92) hat als die "Empfohlene" Seite. Daher sollte ich auf Erkunden sein, aber das "Featured" wird mit einem Z-Index von 93 über "Explore" gelegt.

Ich habe das gleiche Problem, aber in meinem Fall kann ich nach der Anmeldung nicht einmal umgeleitet werden.

Wenn ich bereits eingeloggt bin und in der Login-Ansicht lande, wird nav.setRoot(TabsPage) perfekt ausgeführt.

Aber wenn ich mich mit Facebook anmelde, nachdem ich das Benutzerprofil nav.setRoot(TabsPage) erhalten habe, tut sich nichts. Außerdem tut nav.push(TabsPage) auch nichts, aber wenn ich nav.push(Main) mache, wo Main einer meiner Tabs ist, wird es korrekt ausgeführt, aber ich habe keine Tabbar und es erscheint offensichtlich ein Zurück-Button.

Auch wenn ich nav.setRoot(Main) mache, funktioniert es korrekt, aber ich lande in einem Tab ohne Tabbar und mit Zurück-Button.

Ich füge einige Informationen hinzu. Ich habe in den Dokumenten gesehen, dass setRoot ein Versprechen zurückgibt, also habe ich Folgendes getan:

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

Dies wirft true , wenn ich auf der Anmeldeseite lande und bereits angemeldet bin, wirft aber nichts, wenn ich mich mit Facebook anmelde, also scheint es, dass das Versprechen nie aufgelöst wird.

Okay, ein weiteres Update. Wenn Sie in der Funktion setPages, die von setRoot aufgerufen wird, zum Kern von Ionic2 zu components/nav/nav-controller.js gehen, wird der Callback der Transition niemals ausgeführt.
Wenn Sie dem Ablauf der aufgerufenen Funktionen folgen: setRoot -> setPages -> _transition -> _render -> _postRender

In der _render-Funktion:

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);
    }
});

Mein Code tritt in enteringView.onReady ein und der Rückruf wird nie ausgeführt.

Wenn ich nur die Methode _postRender aufrufe, bevor ich auf enteringView.onReady warte, funktioniert meine App gut, aber sie ist so schmutzig.
Das Problem scheint zu warten, bis die Seite der Registerkarte fertig ist. Ich denke, es wird nie bereit oder erreicht nie den Bereitschaftszustand.

Könnte das etwas mit meinem Code sein? Oder ist wahrscheinlich ein Bug?

Danke schön!

Ich habe das gleiche Problem mit Google oder Facebook auth

@privetr das scheint mit beta4 behoben worden zu sein. Können Sie es bitte überprüfen ? Meine funktioniert jetzt gut.

@jorchg Kannst du das auch prüfen? wenn du eine Chance bekommst :)

Hallo alle! Da es so aussieht, als ob dies in Beta.4 behoben wurde, werde ich dieses Problem schließen, aber wenn Sie dieses Problem immer noch haben, können Sie es gerne kommentieren!

Ich habe immer noch dieses Problem. Ich kann das Navi nicht dazu bringen, nach einer Facebook-Anmeldezusage auf meine TabsPage zu pushen oder Root zu setzen.

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

Ich erlebe auch die Situation, in der die neue Seite nicht angezeigt wird, wenn ich nav.setRoot(x) aufrufe. Wenn ich jedoch ein Eingabefeld auf der aktuellen Seite fokussiere, verschwindet es und zeigt die richtige Seite an.

Wenn ich auf den Stack anstelle von setRoot drücke, wird die Animation außerdem nicht ausgeführt, bis ich ein Eingabefeld fokussiere.

Gleiches Problem.

Bearbeiten: Habe gerade die Navigation in meiner App auf ein Seitenmenü umgestellt und alles funktioniert einwandfrei. Die Tabs sind also ab Beta 4 FYI borked.

@daveshirman verwendest du Tabs zum Navigieren? Es könnte mit Registerkarten zusammenhängen, mein Problem bezog sich auf das Seitenmenü. Allerdings verwenden sie beide den Navcontroller, nicht sicher, warum es für mich und nicht für Sie funktionieren würde. Vielleicht produzieren Sie einen Plunker oder öffnen Sie ein neues Problem, und das ionische Team wird Ihnen helfen können.

Ich hatte das gleiche Problem: nav.setRoot(MyComponent) schien nichts zu tun. Ich habe die App in Android mit --live-reload ausgeführt, und es gab Warnungen, dass einige Ereignisse nicht ausgelöst wurden:

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

Ich konnte den Code auch nicht im Browser testen, da es darum geht, eine bestimmte Seite anzuzeigen, wenn das Gerät offline geht.

Also habe ich endlich versucht, meinen Code in Android auszuführen, aber ohne das Live-Neuladen, und es funktioniert gut.

Es gibt also etwas am Live-Neulademodus, das ihn daran hindert, zu funktionieren. Verwenden von Beta4 als meine Abhängigkeit und der CLI-Version 2.0.0-beta25.

Ich habe immer noch das Problem, das ich beschrieben habe. Ich habe es völlig vergessen und nach einem ionischen Update funktionierte es nicht mehr, also habe ich es einfach wieder modifiziert, wie in meinem letzten Beitrag in diesem Thread beschrieben.

Soll ich ein weiteres Thema eröffnen?

Hallo allerseits. Hat jemand eine Lösung dafür gefunden? Ich verwende derzeit Ionic [email protected] und das Problem ist immer noch vorhanden!

Ich fand heraus, dass die Ursache für mein Problem darin bestand, .pop() aufzurufen, wenn nur setRoot aufgerufen wurde.

Ich habe festgestellt, dass das Aufrufen von meinem app.ts zuverlässig zu funktionieren scheint. Der Aufruf von einer anderen Seite scheint fehlzuschlagen.
Wenn ich mich nicht auf einer Stammseite befinde, die etwa 3 Seiten tief ist, rufe ich außerdem nav.popToRoot() nach der setRoot-Methode auf, was funktioniert:

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

Warum ist dieses Thema geschlossen? Navigation scheint wirklich kaputt zu sein. Wenn ich eine Seite mit Formularen pushe, funktioniert es auch nicht.

Unterbricht auch, wenn auch ein modales Fenster angezeigt wird.
Am 13. Juli 2016 um 3:59 Uhr schrieb "scorpnode" [email protected] :

Warum ist dieses Thema geschlossen? Navigation scheint wirklich kaputt zu sein. Wenn ich eine Seite pushe
Mit Formularen darin wird es auch nicht funktionieren.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

Hallo, das passiert mir immer noch in 2.0.0-beta.10. Ich erhalte einen leeren Bildschirm, nachdem ich NavController.setRoot aufgerufen habe. Tritt nur auf iOS-Geräten auf

Geräteinformationen:

  • Modell: iPad5,4
  • iOS-Version: 8.3

Ich stehe vor diesem Problem in 2.0.0-beta.10 . Ich kann mit NavController.setRoot nicht zur nächsten Seite navigieren. Mein Code sieht so aus:

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

Geräteinformationen:

  • modell: motorala x play
  • Android-Version: 6

CLI v2.0.0-beta.32.

Habe immer noch Probleme mit
this.nav.setRoot(ListPage)
von hello-ionic.ts der Starter-Tutorial-App.

Ich wollte die FB-Anmeldung ausprobieren, die mit v2 mühelos möglich war.

Irgendjemand anderes?

[Bearbeiten]
Ich benutzte
import {Nav} from 'ionic-angular';
anstatt
import {NavController} from 'ionic-angular ';

Mein Problem wurde gelöst. Hoffe, das hilft jemandem

Habe hier das gleiche Problem!
Gibt es ab sofort eine Lösung?

Hallo zusammen, wenn jemand einen Plunker zur Verfügung stellen könnte, der dieses Problem demonstriert, wäre das großartig. Danke, dass du Ionic verwendest!

Hallo alle! Wie es scheint, ist es eine Weile her, seit es zu diesem Thema irgendwelche Aktivitäten gab, und ich werde es vorerst schließen. Fühlen Sie sich frei, zu kommentieren, wenn Sie immer noch auf dieses Problem stoßen. Danke, dass du Ionic verwendest!

Tut mir leid, dass ich nicht geantwortet habe, ich war im Urlaub 💃

Mein Problem scheint mit Cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4 zusammenzuhängen

Als ich mein Projekt auf beta.10 aktualisierte und anfing, den Facebook-Wrapper von ionic-native zu verwenden, hörte das Problem einfach auf. Sehr seltsam, wenn man bedenkt, dass der Wrapper dasselbe Plugin verwendet.

Vielen Dank!

Kein Problem, froh, dass es für Sie behoben wurde!

Hey @jgw96 ! Leider scheint dies in Beta 10 immer noch ein Problem für mich zu sein. Sie können dies im plnkr unten sehen. Tatsächlich habe ich ein Anmeldemodal, das den Stamm auf eine „Tabs“-Seite setzt, sobald ich mich erfolgreich angemeldet habe. Von einer Seite in den „Tabs“ habe ich eine „Logout“-Schaltfläche, die ein Ereignis auslöst, das in app.ts verbraucht wird. In app.ts versuche ich, den Stamm auf die "LoginPage" zu setzen, aber es scheint nichts zu passieren. Wenn ich auf das DOM schaue, während ich auf "Abmelden" klicke, kann ich sehen, dass Dinge ausgelöst werden, und die Anmeldeseite existiert unter den Registerkarten, aber die Navigation scheint einfach nicht zu erfolgen. Irgendwelche Ideen?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

Vielen Dank für Ihre Zeit!

Ich habe ein neues Problem für dieses #7593 eingereicht. Gilt für 2.0.0-beta.10 und 11, möglicherweise andere.

Ich habe das gleiche Problem mit Beta 11.
Die Navigation scheint gut zu funktionieren, bis this.nav.setRoot(xxx) aufgerufen wird. Danach funktioniert die Navigation nach dem Zufallsprinzip ... Wenn Sie eine neue Seite verschieben, passiert manchmal nichts: Die Ansicht bleibt auf der aktuellen Seite statt auf der neuen. Beim Popup scheint die Navigation manchmal zweimal zu poppen.
Alles scheint mit dem NavController-Objekt korrekt zu sein und alles wird normal ausgelöst. Aber es scheint Verwirrung im DOM zu geben: Werte von Z-Index-Eigenschaften für Ion-Page-Tags sind in diesen Fällen falsch, sodass die falsche Seite oben bleibt.

Ich sehe genau das gleiche Verhalten wie @Troknus in Bezug auf Double Page Popping und DOM-Verwirrung.

Auch beim ersten Mal setRoot, dann bei der nächsten Navigation, flackert die anfängliche Root-Seite auf, als ob sie vorher nicht vollständig entladen worden wäre.

Ich habe auch das @Troknus -Problem. Ich versuche, die Show-Page-Klasse manuell hinzuzufügen und zu funktionieren, aber das ist keine gute Lösung.

Ich suche auf allen Seiten, aber nichts. Ich probiere alle möglichen Lösungen aus, aber alles ist im Sande.

in Beta 10. Die Navigation läuft einwandfrei. Warum nicht in Beta 11.

Ich sehe das gleiche Verhalten wie @Troknus auch.

Leute, die das gleiche Problem haben wie @jorchg sagte ... in Anbetracht des Tabs-Fehlers ... es wird nach dem zweiten Aufruf einfach auf Tabs verschoben (scheint, dass das Push erfolgt, aber die aktuelle Seite immer noch oben ist)

Wenn ich nach der Anmeldung versuche, in die Registerkartenansicht zu wechseln, aber nicht funktioniert. Wenn ich auf eine Seite drücke, die in einer Registerkarte sein soll

Ich habe das gleiche Problem wie @Troknus

@schaergeek auf Beta 11 aktualisiert und es hat funktioniert. Hier ist das Beispiel https://github.com/mariohmol/ionic2-meteor-messenger-password

Ich habe Troknus Daumen hoch, aber ich denke, ein Beitrag ist klarer.

Diese Navigation ist ein echtes Problem.
Wir (und ich nehme an, viele andere Leute) dürfen mit diesem Fehler nicht in die Produktion gehen.
(Wir arbeiten in Beta 11 als Troknus und wir haben das gleiche ...).

Ich habe mir den plnkr von @joshgarwood angesehen. Die Veranstaltungsveröffentlichung scheint das Problem zu sein? Wenn Sie, anstatt das Authentifizierungsereignis zu veröffentlichen, damit MyApp die Arbeit erledigt, stattdessen den Stamm über die NavController-Instanz in TabPage festlegen, dann funktioniert es. Der Versuch, den Stamm über den Ereignis-Listener in MyApp festzulegen, funktioniert nicht. Es scheint mir also ein Problem mit den verschiedenen NavController-Instanzen zu sein, die injiziert werden ...? Ich bin mir nicht sicher, wie das DI hier funktionieren soll, aber ich bin der Meinung, dass sich der Verbraucher nicht darum kümmern sollte, welche Instanz von NavController injiziert wird. Wenn ich setRoot(*) aufrufe, sollten die Dinge einfach funktionieren, oder?

In Bezug auf das Z-Index-Problem, über das @Troknus spricht, interessiert Sie vielleicht alle Ausgabe Nr. 8042. Allerdings wird in diesem Fall setRoot(*) überhaupt nicht aufgerufen.

Eigentlich habe ich gerade den Kommentar von @ jgw96 gelesen und es scheint, dass Sie keine zufälligen NavController-Instanzen verwenden sollen ...?

Das ändert aber nichts daran, dass es einen Fehler bei den Z-Indizes gibt.

gleiches problem hier mit beta11...

Hat jemand einen anderen plnkr, der das DOM reproduziert, wenn es verwirrt wird oder Seiten flackern? Der plnkr von @joshgarwood enthält keine Pushs oder Pops.

@rcjsuen Hatte das gleiche Problem in Beta10 & Beta11, ich habe diese Problemumgehung herausgefunden. Ich bin mir nicht sicher, ob setRoot wie beabsichtigt funktioniert, aber das funktioniert vorerst.

Funktioniert nicht

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

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

      StatusBar.styleDefault();
    });
  }
}

Arbeiten

 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 Habe das gleiche Problem - aber selbst diese von dir vorgeschlagene Lösung hat bei mir nicht funktioniert.
Mein Code war zunächst wie deiner - dann habe ich versucht, auf ionic 2 rc0 und angle 2.0.1 zu aktualisieren, aber das funktionierte nicht gut mit Firebase (noch mit Anglefire), also kehrte ich zurück zu:

{
    "@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"
}

Gelöschte node_modules/ hat npm installiert und jetzt stehe ich vor diesem Problem.

Das Seltsame ist, wenn ich this.rootPage auf etwas außerhalb der Callback-Funktion setze, dann navigiert die App zu dieser Seite. Z.B

        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
            }
        });

Navigiert den Benutzer zur TeamPage und navigiert den Benutzer dann zur LoginPage (in Fällen, in denen der Benutzer nicht angemeldet ist)

jedoch

        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
            }
        });

Wird den Benutzer niemals irgendwohin navigieren

@ Peter Piper

Ich habe nicht aktualisiert, aber ich hatte immer wieder Probleme, die nach dem Upgrade auf RC0 verschwanden. Für eines meiner Projekte verwende ich auch Firebase und hatte einige Probleme beim Aktualisieren, aber jetzt funktioniert alles.

Ich verwende AngularFire nicht, aber dieses Tutorial behandelt es: https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

EDIT: Hier ist ein kurzes Beispiel, das ich gemacht habe

@ Vanclief

Danke, ich habe diesen Ansatz bereits ausprobiert - und es hat funktioniert. Aber die Tatsache, dass ich Hacks in einem Node-Modul in Kombination mit dem Absturz von ionic RC_0 beim Ansehen von Dateien beim Ausführen ionic serve durchführen muss, veranlasste mich, das Upgrade abzubrechen und bei der älteren Version zu bleiben.

Wie auch immer, ich habe das oben erwähnte Problem gelöst, bei dem das Festlegen der Stammseite in einem Rückruf nie funktioniert, es sei denn, es wurde zuvor festgelegt, indem ich überprüft habe, ob firbase.auth.currentUser festgelegt ist, und dann die rootPage festgelegt habe

        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);
        });

und dann eine Prüfung in der setRoot-Methode durchführen, damit sie nicht zweimal zur selben Seite navigiert.

Dies ist ebenfalls ein Hack und behebt das zugrunde liegende Problem nicht. Leider habe ich nicht die Zeit, mich nächste Woche eingehender mit dem Thema zu befassen.

Dies ist immer noch ein Problem. Die Verwendung von this.nav.push(...) funktioniert gut, aber die Verwendung von this.nav.setRoot(...) funktioniert nach dem ersten Mal nicht. Hier sind meine ionischen Informationen:

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

Aus Paket.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 Warum ist das geschlossen? Dies ist eindeutig ein offener Fall, da setRoot nicht richtig funktioniert.

@daveshirman , ich stand vor dem gleichen Problem, es ist kein Navigationsproblem, aber hier ist, wie ich es gelöst habe.

in meinem app.ts ist dies

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();
});

Die obige if-Anweisung lautet: // Wenn es eine Benutzerseite gibt, SET THE ROOTPAGE TO TabsPage.
andernfalls sollte es auf der LoginPage bleiben, Sie werden feststellen, dass, wenn Sie die normale Firebase-Anmeldemethode verwenden, der if-Teil ausgeführt wird (d. h. er navigiert zur RootPage, aber wenn Sie Facebook verwenden, wird der else-Teil ausgeführt (d. h. er bleibt auf der Loginseite

Ich habe es so gelöst.
Facebook Login() {

// bei Facebook anmelden
Facebook.login(['email']).then((result=>{
// Anmeldedaten festlegen, damit melden Sie sich bei Firebase an
Anmeldeinformationen lassen = firebase.auth.FacebookAuthProvider 'Anmeldeinformationen'
// Melden Sie sich bei Firebase an, dies verhindert, dass die Navigation funktioniert, was dazu führt, dass der ELSE-Pfad der //-Anweisung in der app.ts ausgeführt wird
firebase.auth().signInWithCredential (Anmeldeinformationen) zurückgeben;
})).dann((Benutzer)=>{
//alert(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth().currentUser.uid).set({
id:firebase.auth().currentUser.uid,
E-Mail: Benutzer.E-Mail,
displayName:user.displayName,
profilePictureURL:user.photoURL
});

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

}

Was im obigen Code passiert ist, ist Folgendes:
Zuerst müssen Sie sich bei Facebook anmelden, was ich auch getan habe
Facebook.login(['email']).dann((result=>

Zweitens müssen Sie Anmeldeinformationen festlegen, die Ihnen helfen, sich bei der Firebase anzumelden, indem Sie das accessToken verwenden, das Ihnen vom Facebook-Anmeldeergebnis gesendet wurde, was ich hier getan habe
Anmeldeinformationen lassen = firebase.auth.FacebookAuthProvider 'Anmeldeinformationen' ;
Drittens müssen Sie sich mit den von Ihnen festgelegten Anmeldeinformationen bei Firebase anmelden, was ich hier getan habe
firebase.auth().signInWithCredential (Anmeldeinformationen) zurückgeben;
HINWEIS: Dies ist der genaue Grund, warum Ihr this.navCtrl.setRoot(TabsPage); hat nicht funktioniert (weil sich der Benutzer noch bei Firebase anmelden muss.

Sie können also jetzt zum rootPath im then()-Pfad des Codes navigieren.

und stellen Sie bitte sicher, dass Ihre Facebook-App-ID und AppSecrete auf Firebase>Authentifizierung>Facebook-Panel konfiguriert sind.

ICH HOFFE DAS HILFT

@OyebisiJemil Danke für deine lange Erklärung dessen, was du getan hast. Aber ich meinte, ich hatte konzeptionell das gleiche Problem, da setRoot nicht richtig funktioniert, nicht mit der Verwendung von Facebook oder so. Danke aber nochmal. Dieses Problem sollte nicht geschlossen werden, es sei denn, es gibt ein anderes offenes Problem mit derselben Beschreibung.

Was es anscheinend gibt:

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

Ich treffe dieses Problem auch mit sehr ähnlichen Umständen. In meinem Fall hat der Wechsel zu push(view) anstelle von setRoot(view) das Problem gelöst und passt nicht wirklich zu meinem App-Flow.

Ich habe das gleiche Problem. nav.push(view) funktioniert gut, aber nav.setRoot funktioniert nicht. Hat jemand Vorschläge?

Ich habe immer noch das gleiche Problem wie heute im neuesten Build:

Ausloggen() {
this.authData.logoutUser().then(() => {
this.nav.setRoot (Anmeldeseite);
});
}

funktioniert nicht. Bitte helfen. Danke. Lisa

Verwenden Sie push anstelle von setRoot ...

@jgw96 , @adamdbradley das ist immer noch ein großes Problem. Bitte öffnen Sie es erneut und weisen Sie einen Meilenstein zu. Viele Leute haben dieses Problem, einschließlich mir und seiner wesentlichen Funktionalität für eine App.

@dejancecelj das ist keine Lösung für dieses Problem.

@lisaiceland Um dieses Problem zu umgehen, bin ich diesem Vorschlag gefolgt:
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@niallr12 @daveshirman ist das immer noch ein Problem in RC3?

@manucorporat Ich bin mir nicht sicher, ob dies ein Problem in RC3 ist, aber ich sehe keine Lösung dafür im Änderungsprotokoll. Ich bin mit meiner Lösung zufrieden und denke, dass es sowieso ein insgesamt besserer Ansatz ist.

Ich kann für Sie in RC3 testen, wenn Sie möchten.

@niallr12 Nun , ich konnte dieses spezielle Problem nie reproduzieren. Aber ich habe Wochen damit verbracht, NavController zu härten, mit unzähligen kleinen Korrekturen und Tests. Wie dieser: Worst Case , der den Navigationsstapel mit einem verrückten Fluss belastet.

Ich wäre sehr hilfreich, wenn Sie diesen Fehler gegen RC3 testen könnten.

@manucorporat Ich kann das Problem immer noch in rc3 replizieren. In meinem speziellen Fall scheint es die aktuelle Ansicht nicht zu schließen, wenn ich root setze. Wenn ich die aktuelle Ansicht verwerfe und dann root setze, funktioniert es einwandfrei. Das Schieben der Ansicht funktioniert völlig problemlos.

Hallo,

Ich bin mir nicht sicher, ob meine Antwort jemandem helfen wird, da ich nicht alle vorherigen Nachrichten gelesen habe, aber als ich in meinem Projekt auf ein solches Problem gestoßen bin, habe ich es gelöst, indem ich auf den übergeordneten Navigationsstapel verwiesen habe, aus diesem Grund konnte ich zurückgehen Willkommensseite zB:

Willkommensseite (Stammseite)

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

Feature-Seite ( mit Registerkarten )

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

Dies muss auf diese Weise gehandhabt werden, da Registerkarten ihren eigenen Navigationsstapel haben, was bedeutet, dass jede Verwendung von setRoot auf der Registerkarten-Navigationsobjektebene auf eine andere Seite umgeleitet wird, der Registerkartenblock in der Fußzeile jedoch weiterhin sichtbar wäre.

Warum ist dieses Thema geschlossen? Ich habe dasselbe Problem. Ich verwende die setRoot-Funktion in meinem Beispielanbieter. App setRoot und geänderte Seite, aber Navigation (Menü) ist nach Abschluss deaktiviert.

Es ist mein Code im Anbieter

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)));
    });
}

Es sind meine Informationen

Cordova CLI: 6.3.1
Ionische Framework-Version: 2.0.0-rc.3
Ionische CLI-Version: 2.1.4
Ionic App Lib-Version: 2.1.2
Ionische App-Skriptversion: 0.0.45
ios-bereitstellungsversion: 1.9.0
ios-sim-version: 5.0.9
Betriebssystem: MacOS X Sierra
Knotenversion: v6.9.1
Xcode-Version: Xcode 8.1 Build-Version 8B62

Ich hatte das gleiche Problem. Nachdem ich jedoch sichergestellt hatte, dass zu einem bestimmten Zeitpunkt nur die setrroot-Anweisung ausgeführt wurde, funktionierte alles perfekt. Aber aus verschiedenen Gründen, wenn mehrere Setroot-Anweisungen zu einem bestimmten Zeitpunkt ausgeführt werden, dh vor dem Rendern, erstellt Ionic mehrere Seiten, aufgrund derer die Navigation in meinem Fall hängen bleibt.

Scheint, dass dieses Problem in RC4 zu etwas Fremdem mutiert ist. Dieselbe Art von Problem, außer dass beim Einstellen von root jetzt von der beispielhaften Anmeldeseite auf ein Menü/Dashboard die Anmeldeseite im Ansichtsstapel verbleibt, der die Zurück-Schaltfläche in der Kopfzeile anzeigt, was alle Arten von Chaos verursacht

Ich bin gezwungen, einen location.reload durchzuführen, um dies zu berücksichtigen, was meiner Meinung nach keine schreckliche Benutzererfahrung ist, da dies nur während der Registrierung neuer Benutzer geschieht, aber dennoch ... Ich verstehe nicht, warum dieses Problem so oft geschlossen wird die Leute haben das Problem immer noch.

Ich erstelle ein Ereignis zum Abmelden.

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

jetzt abmelden:

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

Hallo allerseits. Hat jemand eine Lösung dafür gefunden? Ich verwende derzeit Ionic 2.0.0-rc.4 und das Problem ist immer noch vorhanden!

Hallo,

// Diese Klassen importieren
 importiere {Komponente, ViewChild} aus '@angular/core';
 importiere {Platform, MenuController, Nav} aus 'ionic-angular';

 Exportklasse MyApp {
 //Setze diese Eigenschaft
 @ViewChild(Nav) Nav: Nav;

 // Implementieren Sie diese Methode und funktioniert perfekt
 private openPage(page: any): any {
 // Token validieren 
 this.loggedIn = this.service.canActivate();
 if (!this.loggedIn) {
 //nicht eingeloggt 
 this.nav.setRoot (Anmeldeseite);
 } anders {
 //angemeldet
 this.nav.setRoot (Startseite);
 }
 this.menuCtrl.close();
 }

Umarmungen!

Meine App: 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);
  }

Hat jemand zumindest einen Workaround dafür gefunden?

Gleiches Problem wie bei @joshuaohana.

Wenn ich setRoot mache, BEVOR ich mich bei Facebook anmelde, funktioniert alles wie erwartet.
Wenn ich NACH Facebook setRoot mache, bekomme ich das gleiche Verhalten wie @joshuaohana.

Danke.

(Habe gerade dieses Duplikat gefunden: https://github.com/driftyco/ionic/issues/6297)

Ereignis zum Abmelden erstellen funktioniert.

Außerdem finden Sie unten eine detaillierte Erklärung zur Navigation mit einer anderen funktionierenden Lösung

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

wertvollste Teil des unten eingefügten Codes.

importiere { App } von 'ionic-angular';
...
Konstruktor (private _app: App) {}

Ausloggen() {
...

    // 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

}
...

Vielleicht hat jemand von euch den gleichen Fehler gemacht wie ich:

Ich habe die Navigation über "setRoot" verwendet, aber vermisst, dass gleichzeitig die Bindung "[root]=.." auf dem HTML-Template verfügbar ist. Das erneute Synchronisieren der beiden Informationen hat mein Problem behoben. In diesem Fall habe ich die Modellbindung entfernt und die Wurzel nur über die API verwaltet.

Gruß Michael

Hallo Leute,

@ly-dev-Lösung hat bei mir funktioniert. Ich habe gerade this._app.getRootNav().setRoot(EntryPage); und es funktioniert.

Importieren Sie zuerst Nav von ionic-angular, am selben Ort wie navController
import { App, NavController } from 'ionic-angular';

Geben Sie es dann in Ihrem Konstruktor an:
constructor(public navCtrl: NavController, public appCtrl: App)

Jetzt können Sie auf das Rootnav zugreifen:
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojary Diese Lösung hat nicht funktioniert. Wenn der Benutzer zu mehreren Registerkarten wechselt.

Beispiel : Registerkarte „Startseite“ mit mehreren Seiten. Wenn der Benutzer sich zu den mehreren Seiten durchklickt. Gehen Sie dann nicht zurück, sondern wechseln Sie zur Registerkarte "Konto" und melden Sie sich dann ab. Sie bleibt bis zur Aktualisierung auf der Registerkarte "Konto".

Ich habe herausgefunden, wenn der Benutzer auf die Registerkarte "Startseite" klickt und nicht weiter geht, wird der Benutzer korrekt abgemeldet.

Ich denke, es geht darum, zu vielen Registerkarten im Dom zu gelangen, und getRootNav geht nicht so weit zurück, wenn der Benutzer auf die zweite Seite im Home-Tab geht.

Dies ist immer noch ein Problem.

Ja, immer noch ein Problem für mich, da ich Tabs als Hauptzielseite der Anwendung verwende. Durch Aufrufen von _navCtrl.setRoot() von einer der Seiten innerhalb der tabComponent wird nur diese Seite auf rootPage gesetzt, aber die Registerkartenschnittstelle am unteren Rand bleibt bestehen. Dadurch kann ich immer noch auf andere Seiten im Tab zugreifen!

image

Die richtige Lösung dafür ist:

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

oder eine Zeile

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

Ich habe auch ein ähnliches Problem mit meiner neuen App, meine Anwendung funktioniert nur, wenn ich zuerst auf das Gerät pushe, wo ich eine Socket-Verbindung herstelle und eine Socket-Kommunikation durchführe. Ich beende die App, trenne die Verbindung zu meinem Entwicklungscomputer, führe die Anwendung erneut aus, ich habe keine Verbindungsaktivität auf der Serverseite gesehen. Ich habe die Uiktiomasfeliz-Empfehlung nicht umgesetzt, ich werde das später heute versuchen. Aber nur eine Vorwarnung.

Ja. Dasselbe habe ich auch erreicht mit:

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

Es unterbricht jedoch die Bildpfade auf Geräten ...

(getRootNav) ist veraltet und wird in der nächsten Hauptversion entfernt. Verwenden Sie stattdessen getRootNavById.

Also... dieser Fehler wurde nie behoben und der vorherige Patch funktioniert nicht mehr.. :/

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

Das ist nicht woking für mich ...

Dies wurde zumindest für mich mit Version 3.5.3 behoben

welp, 3.5.3 hat es nicht für mich behoben.

Jungs und immer noch dieses Problem Sidebar funktioniert nicht nach setRoot ();

Ich verwende nur dies: this.navCtrl.setRoot (HomePage);

Ich habe alle Lösungen hier ausprobiert, habe aber immer noch dieses Problem
Ionisch 3.10.3

hab ich so gelöst

App importieren

importiere {IonicPage, NavController, Nav, App} aus 'ionic-angular';

UND jetzt verwenden

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

Hallo, ich teste gerade eine Hello World App auf einem iPhone4 und einigen anderen Geräten mit Android.

Letzte Ionic- und CLI-Version.

Das große Hauptproblem ist mit dem iPhone, der Aufruf von setRoot funktioniert nicht.

void onGoClick(){
// diese Zeile TUT NICHTS und es wird kein Fehler ausgegeben.
this.navCtrl.setRoot (Startseite);

// diese Zeile TUT NICHTS und es wird kein Fehler ausgegeben.
this.app.getRootNav().setRoot(Startseite);
}

das geht auch NICHT

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

Grüße.

Hi @alemdg Ich denke, es ist die Art und Weise, wie Sie die Routen aufrufen, zum Beispiel, wenn Sie wie einen Text oder wie ein Objekt definieren, was auch immer,

wenn du Probleme vermeiden willst, rufe gerne einen Text ("HomePage") auf und erstelle diese Variable

const root = this.app.getRootNav();

und rufen Sie die folgende Methode auf

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

Importieren Sie dieses Objekt

importiere {IonicPage, NavController, NavParams, Nav, App} aus 'ionic-angular';

Konstrukteur(
Öffentliche App: App
) {

erstens ist das popToRoot und zweitens definiere ein neues root ;)

void onGoClick(){
// diese Zeile TUT NICHTS und es wird kein Fehler ausgegeben.
this.navCtrl.setRoot( "Startseite" );

// diese Zeile TUT NICHTS und es wird kein Fehler ausgegeben.
root.popToRoot();
root.setRoot( "Startseite" );
}

das geht auch NICHT

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

@spidermay Danke für die Antwort, funktioniert aber immer noch nicht.

Ich habe importiert
importiere {IonicPage, NavController, NavParams, Nav, App} aus 'ionic-angular';

und hingerichtet
const root = this.app.getRootNav();
root.popToRoot();
root.setRoot("Startseite");

Aber wenn ich zweimal auf den Button klicke, funktioniert es....

ist, als ob eine Auffrischung fehlt....

Ich sehe das am 3.7.1.

Verwenden Sie den folgenden Code, es muss funktionieren oder Sie erhalten eine Fehlermeldung

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

Hallo @FatehiAlqadasi , danke.
Es wird ein Fehler ausgegeben, hier ist das Protokoll.

irren:
C@file :///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
Reduzieren@[nativer Code]
O@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Dh @file :///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@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@file :///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
invoke @file :///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
invoke @file :///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
invokeTask@file :///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
invokeTask@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke @file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
irren:
C@file :///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
Reduzieren@[nativer Code]
O@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21927
format@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:3:23348
Dh @file :///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@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:4:2439
Se@file :///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
invoke @file :///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
invoke @file :///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
invokeTask@file :///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
invokeTask@file :///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@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invoke @file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
DispatchEvent@[nativer Code]
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
[nativen Code]
handleTouchEnd@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:19:19943
[nativen Code]

@tonyawad88
Dies hat das Problem behoben

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

}

2 Jahre alter Fehler, immer noch traut sich niemand, ihn zu beheben ... Ich habe das gleiche Problem in Ionic 3

Hallo alle,

Ich kann alle meine Daten von der Stammseite abrufen und auch navigieren, aber ich kann die Seite nicht aus Registerkarten heraus navigieren, sie ist wie ein untergeordnetes Element von Registerkarten geöffnet.

Habe alle Möglichkeiten versucht, es zu lösen, aber keine Operation funktioniert.

Registerkarte wo meine Daten.
1st

Nach dem Klicken auf die abgerufenen Daten wird auf die Detailseite der Daten umgeleitet, es war eine Umleitung, aber innerhalb der Registerkarte. so was...

2nd

helfen Sie mir,

Danke im Voraus.

Ich habe diesen Fehler seit [email protected] bemerkt. Es scheint mit DeepLinkConfig verbunden zu sein, denn wenn ich das aus meinem app.module entferne, kann ich nav.setRoot() den ganzen Tag ohne Probleme aufrufen. Meine Hypothese ist, dass nach nachfolgenden Aufrufen von setRoot() die Deep-Link-Logik in einen Zustand gerät, in dem sich der Navigationsstapel vor window.location ändert, der Deep-Link-Code sieht, dass window.location auf eine Seite zeigt, die sich nicht auf der befindet stack (weil Sie Root() davon entfernt haben), und so bringt es Sie zu der Seite zurück, von der Sie gerade versucht haben, wegzunavigieren.

Unabhängig davon ist hier eine Problemumgehung, die für mich funktioniert.

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

Vielen Dank @jknisley ,
Ich habe mein Problem damit gelöst.

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

Dieser Code leitet mich auch zu einer neuen Seite und einem anderen Layout (nicht unter der Registerkarte) weiter.

Lassen Sie dies einfach hier für die Nachwelt. Diese Abmeldefunktion scheint bei mir ohne Nebenwirkungen zu funktionieren. Danke an @uiktiomasfeliz.

CLI-Pakete: (/usr/local/lib/node_modules)

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

Globale Pakete:

cordova (Cordova CLI) : 7.1.0

lokale Pakete:

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

System:

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');
  }

Dies ist der Weg, den ich gefunden habe, um einen neuen Navigationsstapel festzulegen und den alten Navigationsstapel zu entfernen. Dies wurde für Ionenwinkel 3.9.2 durchgeführt

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

Danke für das Problem! Dieses Problem wird gesperrt, um Kommentare zu verhindern, die für das ursprüngliche Problem nicht relevant sind. Wenn dies immer noch ein Problem mit der neuesten Version von Ionic ist, erstellen Sie bitte ein neues Problem und stellen Sie sicher, dass die Vorlage vollständig ausgefüllt ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen