Ionic-framework: Ionic2 - nav.setRoot (Componente) - Funciona solo la primera vez, no se puede navegar después, no se informan errores

Creado en 18 mar. 2016  ·  100Comentarios  ·  Fuente: ionic-team/ionic-framework

Breve descripción del problema:

Estoy desarrollando una aplicación con Ionic2. Tengo App.ts como página principal, Welcome.ts como página secundaria y Featured.ts como página secundaria también. Tengo firebase integrado con la aplicación. Rootpage se establece primero en Bienvenido.

this.rootPage = Welcome;

Paso 1: hago clic en un botón en Bienvenido para autenticar con Google, una vez que se llama a onAuth, configuro this.nav.setRoot(Featured); Todo funciona bien hasta ahora. Llego a la página Destacados que habilita un menú lateral con diferentes páginas y puedo navegar a todas ellas sin problema.

Paso 2: Destacado habilita un menú lateral de App.ts/html, allí tengo un botón de cierre de sesión que llama a no autenticar.
Unauth realiza una autenticación de Firebase y luego:

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

Paso 3: Vuelva a iniciar sesión igual que en el paso 1. Todo está bien hasta ahora.

Paso 4: abre el menú lateral, selecciona cualquiera de las páginas del menú lateral, no se produce la navegación. el menú lateral se cierra pero la página sigue siendo la misma, el botón del icono de la barra de navegación desaparece y no se produce la navegación.
código de página abierta:

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

¿Qué comportamiento esperas?

Espero que la navegación continúe ocurriendo, similar a lo que sucede en el paso 1.

Pasos para reproducir:
Pasos para reproducir incluidos arriba.

Code included above.

Otra información: (por ejemplo, stacktraces, problemas relacionados, sugerencias sobre cómo solucionarlos, enlaces de stackoverflow, enlaces de foros, etc.)
Desafortunadamente, no se arroja ningún error. No veo ningún error en los registros de la consola.

¿Qué versión iónica? 2.x

Ejecute ionic info desde el indicador de terminal/cmd: (pegue el resultado a continuación)

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 

Gracias.

reply

Comentario más útil

¿Por qué se cierra este tema? La navegación parece realmente rota. Si presiono una página con formularios, tampoco funcionará.

Todos 100 comentarios

Noté lo siguiente: 2 páginas de iones están presentes a la vez en el dom.
screen shot 2016-03-18 at 3 34 03 pm

A la que navegué es "explorar", que tiene un índice z más bajo (92) que la página "destacada". Por lo tanto, debería estar en explorar, pero "destacado" se superpone a "explorar" con un índice z de 93.

Estoy experimentando el mismo problema, pero en mi caso ni siquiera puedo ser redirigido después de iniciar sesión.

Si ya he iniciado sesión y aterrizo en la vista de inicio de sesión, nav.setRoot(TabsPage) se ejecuta perfectamente.

Pero si inicio sesión con Facebook después de obtener el perfil de usuario, nav.setRoot(TabsPage) no hace nada. Además, nav.push(TabsPage) tampoco hace nada, pero si hago nav.push(Main) donde Main es una de mis pestañas, se ejecuta correctamente, pero no tengo una barra de pestañas y aparece un botón Atrás, obviamente.

Además, si hago nav.setRoot(Main) , funciona correctamente, pero aterrizo en una pestaña sin barra de pestañas y con botón Atrás.

Agrego algo de información. Vi en los documentos que setRoot devuelve una promesa, así que hice esto:

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

Esto arroja true cuando llego a la página de inicio de sesión y ya he iniciado sesión, pero no arroja nada cuando inicio sesión con Facebook, por lo que parece que la promesa nunca se resuelve.

Bien, otra actualización. Si va al núcleo de Ionic2 a components/nav/nav-controller.js en la función setPages que se llama desde setRoot, la devolución de llamada de la transición nunca se ejecuta.
Si sigue el flujo de funciones llamado: setRoot -> setPages -> _transition -> _render -> _postRender

En la función _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);
    }
});

Mi código ingresa en enteringView.onReady y la devolución de llamada nunca se ejecuta.

Si solo llamo al método _postRender antes de esperar enteringView.onReady mi aplicación funciona bien, pero es muy sucia.
El problema parece estar esperando a que la página de la pestaña esté lista. Creo que nunca se prepara o nunca adquiere el estado de preparación.

¿Podría ser esto algo con mi código? ¿O es probable que sea un error?

¡Gracias!

Tengo el mismo problema con la autenticación de Google o Facebook

@privetr esto parece haberse solucionado con beta4. Puedes revisar por favor ? El mío está funcionando bien ahora.

@jorchg ¿Puedes comprobarlo también? cuando tengas la oportunidad :)

¡Hola a todos! Como parece que esto se solucionó en beta.4, cerraré este problema, pero si todavía tiene este problema, ¡no dude en comentarlo!

Todavía tengo este problema. No puedo hacer que la navegación presione o establezca Root en mi TabsPage después de una promesa de inicio de sesión de 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

También estoy experimentando la situación en la que si llamo a nav.setRoot(x), la nueva página en realidad no aparece. Sin embargo, si enfoco un campo de entrada en la página actual, desaparece y muestra la página correcta.

Además, si presiono en la pila en lugar de setRoot, la animación no ocurre hasta que enfoco un campo de entrada.

El mismo problema.

Editar: simplemente cambié la navegación en mi aplicación a un menú lateral y todo funciona bien. Entonces, las pestañas están borradas a partir de beta 4 FYI.

@daveshirman , ¿estás usando pestañas para navegar? Podría estar relacionado con las pestañas, mi problema estaba relacionado con el menú lateral. Sin embargo, ambos usan el controlador de navegación, no estoy seguro de por qué funcionaría para mí y no para usted. Tal vez produzca un plunker o abra un nuevo problema y el equipo de ionic podrá ayudarlo.

Estaba teniendo el mismo problema: nav.setRoot(MyComponent) no parecía hacer nada. Estaba ejecutando la aplicación en Android usando --live-reload , y había advertencias sobre algunos eventos que no se activaban:

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

Tampoco pude probar el código en el navegador porque se trata de mostrar una página determinada cuando el dispositivo se desconecta.

Así que finalmente traté de ejecutar mi código en Android, pero sin la recarga en vivo, y funciona bien.

Entonces, hay algo en el modo de recarga en vivo que impide que funcione. Usando Beta4 como mi dependencia y la versión CLI 2.0.0-beta25.

Todavía estoy experimentando el problema que describí. Lo olvidé por completo, y después de una actualización iónica dejó de funcionar, así que lo modifiqué nuevamente como se describe en mi última publicación en este hilo.

¿Debería abrir otro tema?

Hola a todos. ¿Alguien encontró una solución para esto? ¡Actualmente estoy usando Ionic [email protected] y el problema sigue presente!

Descubrí que la causa de mi problema era llamar a .pop() cuando solo se había llamado a setRoot.

Descubrí que llamarlo desde mi app.ts parece funcionar de manera confiable. Llamarlo desde cualquier otra página parece fallar.
Además, si no estoy en una página raíz, como 3 páginas de profundidad, también llamo a nav.popToRoot() después del método setRoot, que funciona:

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

¿Por qué se cierra este tema? La navegación parece realmente rota. Si presiono una página con formularios, tampoco funcionará.

También se interrumpe cuando también se muestra una ventana modal.
El 13 de julio de 2016 a las 3:59 a. m., "scorpnode" [email protected] escribió:

¿Por qué se cierra este tema? La navegación parece realmente rota. Si empujo una página
con formularios tampoco funcionará.


Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/driftyco/ionic/issues/5883#issuecomment-232241198 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

Hola, esto todavía me ocurre en 2.0.0-beta.10. Aparece una pantalla en blanco después de llamar a NavController.setRoot. Solo ocurre en dispositivos iOS

información del dispositivo:

  • modelo: iPad5,4
  • Versión de iOS: 8.3

Me enfrento a este problema en 2.0.0-beta.10 . No puedo navegar a la página siguiente por NavController.setRoot. Mi código se ve así:

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

información del dispositivo:

  • modelo: motorala x juego
  • versión androide: 6

CLI v2.0.0-beta.32.

Todavía tengo problemas con
this.nav.setRoot(ListPage)
de hello-ionic.ts de la aplicación tutorial de inicio.

Quería probar el inicio de sesión de FB que se ha hecho sin esfuerzo con v2.

¿Alguien mas?

[Editar]
yo estaba usando
import {Nav} from 'ionic-angular';
en vez de
import {NavController} from 'ionic-angular ';

Resolvió mi problema. Espero que ayude a alguien

¡Tener el mismo problema aquí!
¿Hay alguna solución a partir de ahora?

Hola a todos, si alguien pudiera proporcionar un plunker que demuestre este problema, sería increíble. ¡Gracias por usar Ionic!

¡Hola a todos! Como parece que ha pasado un tiempo desde que hubo actividad en este tema, lo cerraré por ahora. Siéntase libre de comentar si todavía tiene este problema. ¡Gracias por usar Ionic!

Perdona por no contestar, estaba de vacaciones 💃

Mi problema parece haber estado relacionado con cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4

Cuando actualicé mi proyecto a beta.10 y comencé a usar el envoltorio de Facebook de ionic-native, el problema simplemente se detuvo. Muy extraño, teniendo en cuenta que el contenedor usa el mismo complemento.

¡Muchos gracias!

¡No hay problema, me alegro de que te lo hayan solucionado!

¡Hola @jgw96 ! Desafortunadamente, esto todavía parece ser un problema para mí en Beta 10. Puede ver esto en el plnkr a continuación. Efectivamente, tengo un modal de inicio de sesión que establece la raíz en una página de "Pestañas" una vez que haya iniciado sesión correctamente. Desde una página en "Pestañas" tengo un botón "Cerrar sesión", que activa un evento que se consume en app.ts. En app.ts trato de establecer la raíz en la "Página de inicio de sesión", pero parece que no sucede nada. Al mirar el DOM mientras hago clic en "cerrar sesión", puedo ver que las cosas se disparan, y la página de inicio de sesión existe debajo de las pestañas, pero la navegación simplemente no parece ocurrir. ¿Algunas ideas?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

¡Gracias por tu tiempo!

Presenté un nuevo número para este #7593. Aplicable a 2.0.0-beta.10 y 11, posiblemente a otros.

Tengo el mismo problema con la beta 11.
La navegación parece funcionar bien hasta que se llama a this.nav.setRoot(xxx). Después de eso, la navegación funciona de forma aleatoria... Al empujar una nueva página, a veces no pasa nada: la vista permanece en la página actual en lugar de en la nueva. Al abrir, la navegación parece aparecer dos veces en otras ocasiones.
Todo parece estar correcto con el objeto NavController y todo se dispara normalmente. Pero parece que hay confusión en el DOM: los valores de las propiedades del índice z para las etiquetas de página iónica son incorrectos en estos casos, por lo que la página incorrecta permanece arriba.

Veo exactamente el mismo comportamiento que @Troknus con respecto a la

También la primera vez que configureRoot, luego, en la siguiente navegación, la página raíz inicial parpadea, como si no se hubiera descargado por completo antes.

También tengo el problema de @Troknus . Intento agregar la clase de página de visualización manualmente y la función, pero no es una buena solución.

Busco en todos los sitios pero nada. Intento todas las soluciones posibles pero todo es en vano.

en beta 10. La navegación funciona perfectamente. ¿Por qué no en la beta 11?

También veo el mismo comportamiento que @Troknus .

Chicos, tengo el mismo problema que dijo @jorchg ... teniendo en cuenta el error de las pestañas... simplemente empuja a las pestañas después de la segunda vez que llama (parece que el empuje ocurre pero la página actual sigue en la parte superior)

después de iniciar sesión si trato de presionar a la vista de pestañas pero no funciona... si presiono a una página que se supone que está en una pestaña... funciona... aquí está el proyecto

Tengo el mismo problema que @Troknus

@schaergeek actualizó a beta 11 y funcionó... aquí está el ejemplo https://github.com/mariohmol/ionic2-meteor-messenger-password

Le di el visto bueno a Troknus, pero creo que una publicación es más clara.

Esta navegación es un verdadero problema.
Nosotros (y supongo que muchas otras personas) no podemos movernos en producción con este error.
(Estamos trabajando en beta 11 como Troknus y tenemos lo mismo...).

Eché un vistazo al plnkr de @joshgarwood. ¿La publicación de eventos parece ser el problema? Si en lugar de publicar el evento de autenticación para que MyApp haga el trabajo, configura la raíz a través de la instancia de NavController dentro de TabPage, entonces funciona. Intentar establecer la raíz a través del detector de eventos en MyApp no ​​lo hace. Entonces, ¿me parece un problema con las diferentes instancias de NavController que se inyectan...? No estoy seguro de cómo se supone que funciona el DI aquí, pero siento que el consumidor no debería tener que preocuparse por qué instancia de NavController se inyecta. Si llamo a setRoot (*), entonces todo debería funcionar, ¿verdad?

Con respecto al problema del índice Z del que habla @Troknus , es posible que a todos les interese el número 8042. Aunque en ese caso setRoot(*) no se llama en absoluto.

En realidad, acabo de leer el comentario de @ jgw96 y parece que no debes usar instancias aleatorias de NavController...

Aún así, eso no cambia el hecho de que hay un error con los índices Z.

mismo problema aquí con beta11...

¿Alguien tiene un plnkr diferente que reproduzca el DOM confundido o las páginas parpadeando? El plnkr de @joshgarwood no incluye empujones ni pops.

@rcjsuen Tuve el mismo problema en Beta10 y Beta11, descubrí esta solución. No estoy seguro de si setRoot está funcionando según lo previsto, pero esto funciona por ahora.

No funciona

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

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

      StatusBar.styleDefault();
    });
  }
}

Laboral

 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 Tiene el mismo problema, pero incluso esta solución que ha propuesto no funcionó para mí.
Para empezar, mi código era como el tuyo; luego intenté actualizar a ionic 2 rc0 y angular 2.0.1, pero eso no funcionó bien con firebase (ni con angularfire), así que volví a:

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

eliminó node_modules/ npm install y ahora me enfrento a este problema.

Lo extraño es que si configuro this.rootPage en algo fuera de la función de devolución de llamada, entonces la aplicación navega a esa página. P.ej

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

Navegará al usuario a TeamPage y luego navegará al usuario a la página de inicio de sesión (en los casos en que el usuario no haya iniciado sesión)

Sin embargo

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

Nunca llevará al usuario a ninguna parte.

@Pedro gaitero

No actualicé, pero seguí teniendo algunos problemas que desaparecieron una vez que actualicé a RC0. Para uno de mis proyectos, también estoy usando Firebase y tuve algunos problemas para actualizar, pero ahora todo funciona.

No uso AngularFire, pero este tutorial lo cubre: https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

EDITAR: Aquí hay un ejemplo rápido que hice

@Vanclief

Gracias, ya probé este enfoque, y funcionó. Pero el hecho de que tengo que hacer hacks en un módulo de nodo combinado con el bloqueo de ionic RC_0 cuando veo archivos cuando hago ionic serve me hizo abortar la actualización y apegarme a la versión anterior.

De todos modos, resolví el problema mencionado anteriormente donde la configuración de la página raíz en una devolución de llamada nunca funciona a menos que se haya configurado antes, verificando si firbase.auth.currentUser está configurado y luego configurando 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);
        });

y luego verifique el método setRoot para que no navegue a la misma página dos veces.

Esto también es un truco y no aborda el problema subyacente. Desafortunadamente, no tengo tiempo para realizar una investigación profunda del problema la próxima semana.

Esto sigue siendo un problema. Usar this.nav.push(...) funciona bien, pero usar this.nav.setRoot(...) no funciona después de la primera vez. Aquí está mi información iónica:

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

Desde paquete.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 ¿Por qué está cerrado? Claramente, este es un caso abierto ya que setRoot no funciona correctamente.

@daveshirman , estaba enfrentando el mismo problema, no es un problema de navegación, pero así es como lo resolví.

en mi app.ts es tener esto

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

la declaración if anterior dice // Si hay un usuario CONFIGURAR LA PÁGINA RAÍZ A la página TabsPage.
y de lo contrario, debe permanecer en la página de inicio de sesión, notará que si usa el método de inicio de sesión normal de firebase, la parte if se ejecutará (es decir, navegará a la página raíz, pero cuando use Facebook, la parte else se ejecutará (es decir, permanece en el Página de inicio de sesión

Lo resolví así.
FacebookIniciar sesión() {

//iniciar sesión en facebook
Facebook.login(['email']).then((resultado=>{
// establece las credenciales, las usarás para iniciar sesión en firebase
dejar credenciales = firebase.auth.FacebookAuthProvider 'credencial'
// inicie sesión en firebase, esto es lo que impide que la navegación funcione, lo que lleva a la ruta ELSE de la declaración // en app.ts para ejecutar
devuelve firebase.auth().signInWithCredential(credenciales);
})).entonces((usuario)=>{
//alerta(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth().currentUser.uid).set({
id:firebase.auth().currentUser.uid,
correo electrónico: usuario.correo electrónico,
displayName:usuario.displayName,
URL de imagen de perfil: usuario.URL de foto
});

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

}

lo que sucedió en el código anterior es que,
Primero necesitas iniciar sesión en Facebook, lo cual hice con
Facebook.login(['correo']).then((resultado=>

En segundo lugar, debe establecer unas credenciales que lo ayudarán a iniciar sesión en Firebase utilizando el token de acceso que le envió el resultado de inicio de sesión de Facebook, que es lo que hice aquí.
let credenciales = firebase.auth.FacebookAuthProvider 'credencial' ;
En tercer lugar, debe iniciar sesión en Firebase con las credenciales que configuró, que es lo que hice aquí.
devuelve firebase.auth().signInWithCredential(credenciales);
NOTA: esta es la razón exacta por la que this.navCtrl.setRoot(TabsPage); no funcionó (porque el usuario aún no ha iniciado sesión en firebase.

por lo que ahora puede navegar a rootPath en la ruta then() del código.

y, por favor, asegúrese de que su ID de aplicación de Facebook y appSecrete estén configurados en firebase>autenticación>panel de Facebook.

ESPERO QUE ESTO AYUDE

@OyebisiJemil Gracias por tu larga explicación de lo que hiciste. Pero quise decir que estaba teniendo el mismo problema conceptualmente en el sentido de que setRoot no funciona correctamente, no con el uso de Facebook ni nada. Aunque gracias de nuevo. Este problema no debe cerrarse, a menos que haya otro abierto con la misma descripción.

Que aparentemente hay:

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

También estoy abordando este problema con circunstancias muy similares. En mi caso, cambiar a push (ver) en lugar de setRoot (ver) resolvió el problema y realmente no interfiere con el flujo de mi aplicación.

Tengo el mismo problema. nav.push(view) funciona bien pero nav.setRoot no funciona. ¿Alguien tiene alguna sugerencia?

Todavía estoy enfrentando el mismo problema a partir de hoy en la última versión:

cerrar sesión() {
this.authData.logoutUser().then(() => {
this.nav.setRoot(página de inicio de sesión);
});
}

No funciona. Ayuda por favor Gracias. Lis

Use push en lugar de setRoot...

@jgw96 , @adamdbradley , este sigue siendo un problema importante. Vuelva a abrirlo y asígnele un hito. Muchas personas tienen este problema, incluyéndome a mí y su funcionalidad esencial para una aplicación.

@dejancencelj eso no es una solución a este problema.

@lisaiceland para solucionar este problema, seguí esta sugerencia:
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@niallr12 @daveshirman ¿sigue siendo un problema en RC3?

@manucorporat No estoy seguro de si esto es un problema en RC3, pero no veo una solución en el registro de cambios. Estoy contento con mi solución y siento que es un mejor enfoque general de todos modos.

Puedo probar por ti en RC3 si quieres.

@ niallr12 bueno, nunca pude reproducir este problema en particular. Pero pasé semanas fortaleciendo NavController, con toneladas de pequeñas correcciones y pruebas. Como este: Worst Case que estresa la pila de navegación con un flujo loco.

Sería muy útil si pudiera probar este error contra RC3.

@manucorporat Todavía puedo replicar el problema en rc3. En mi caso particular, no parece descartar la vista actual cuando estoy configurando la raíz. Si descarto la vista actual y luego configuro la raíz, funciona bien. Empujar la vista funciona completamente bien.

Oye,

No estoy seguro de si mi respuesta ayudará a alguien, ya que no he leído todos los mensajes anteriores, pero cuando encontré ese problema en mi proyecto, lo resolví consultando la pila de navegación principal, por esa razón pude volver a página de bienvenida, por ejemplo:

Página de bienvenida (página raíz)

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

Página de características ( con pestañas )

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

Debe manejarse de esa manera, ya que las pestañas tienen su propia pila de navegación, lo que significa que cada uso de setRoot en el nivel del objeto de navegación de pestañas redirigirá a una página diferente, pero el bloque de pestañas en el pie de página seguirá siendo visible.

¿Por qué se cierra este tema? Yo tengo el mismo problema. Estoy usando la función setRoot en mi proveedor de muestra. App setRoot y página modificada, pero la navegación (menú) se deshabilita cuando finaliza.

es mi codigo en proveedor

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 mi información

Cordova CLI: 6.3.1
Versión del marco iónico: 2.0.0-rc.3
Versión Iónica CLI: 2.1.4
Versión de librería de la aplicación iónica: 2.1.2
Versión de secuencias de comandos de aplicaciones iónicas: 0.0.45
Versión ios-deploy: 1.9.0
versión ios-sim: 5.0.9
SO: Mac OS X Sierra
Versión del nodo: v6.9.1
Versión de Xcode: Xcode 8.1 Versión de compilación 8B62

Tuve el mismo problema. Sin embargo, después de asegurarme de que en un momento dado, si solo se ejecuta la instrucción setrroot, todo funcionaba perfectamente. Pero por varias razones, si se ejecutan varias declaraciones de setroot en un momento dado, es decir, antes de renderizar, Ionic está creando múltiples cuotas de páginas a las que se cuelga la navegación en mi caso.

Parece que este problema se transformó en algo más extraño en RC4. El mismo tipo de problema, excepto que al configurar la raíz ahora desde la página de inicio de sesión de ejemplo a un menú/panel de control, la página de inicio de sesión permanece en la pila de vista que muestra el botón Atrás en el encabezado, lo que provoca todo tipo de caos.

Me veo obligado a hacer una ubicación. recargar para dar cuenta de esto, lo que supongo que no es una experiencia de usuario terrible, ya que solo ocurre durante el registro de un nuevo usuario, pero aún así... No entiendo por qué este problema está cerrado ya que muchos la gente sigue teniendo el problema.

Creo un evento para cerrar sesión.

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

ahora cerrar sesión:

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

Hola a todos. ¿Alguien encontró una solución para esto? ¡Actualmente estoy usando Ionic 2.0.0-rc.4 y el problema sigue presente!

Hola,

//importar estas clases
 importar {Componente, ViewChild} desde '@angular/core';
 importar {Plataforma, MenuController, Nav} desde 'ionic-angular';

 clase de exportación MyApp {
 //Establecer esta propiedad
 @ViewChild(navegación) nav: nav;

 //implemente este método, y funciona perfectamente
 página abierta privada (página: cualquiera): cualquiera {
 //validar token 
 this.loggedIn = this.service.canActivate();
 if (!this.loggedIn) {
 //no registrado 
 this.nav.setRoot(página de inicio de sesión);
 } demás {
 //registrado
 this.nav.setRoot(Página de inicio);
 }
 este.menuCtrl.close();
 }

¡Abrazos!

Mi aplicación: 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);
  }

¿Alguien ha encontrado al menos una solución a esto?

Mismo problema que @joshuaohana.

Si hago setRoot ANTES de iniciar sesión en Facebook, todo funciona como se esperaba.
Si hago setRoot DESPUÉS de Facebook, obtengo el mismo comportamiento que @joshuaohana.

Gracias.

(Acabo de encontrar este duplicado: https://github.com/driftyco/ionic/issues/6297)

crear evento para trabajos de cierre de sesión.

también, encuentre a continuación una explicación detallada sobre la navegación con otra solución de trabajo

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

pieza más valiosa del código pegado a continuación.

importar {Aplicación} desde 'ionic-angular';
...
constructor (private _app: App) {}

cerrar sesión() {
...

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

}
...

Tal vez algunos de ustedes cometieron el mismo error que yo:

Utilicé la navegación a través de "setRoot", pero me perdí que al mismo tiempo el enlace "[root]=.." todavía está disponible en la plantilla HTML. Al sincronizar las dos informaciones nuevamente, se solucionó mi problema. En este caso, eliminé el enlace del modelo y administré la raíz solo a través de la API.

Saludos, miguel

Hola tios,

La solución @ly-dev funcionó para mí. Acabo de hacer this._app.getRootNav().setRoot(EntryPage); y funciona.

Primero, importe Nav desde ionic-angular, en el mismo lugar que navController
import { App, NavController } from 'ionic-angular';

luego proporciónelo en su constructor:
constructor(public navCtrl: NavController, public appCtrl: App)

ahora puedes acceder al rootnav:
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojary Esa solución no ha funcionado. Cuando el usuario va a varias pestañas.

Ejemplo : pestaña Inicio con varias páginas. Cuando el usuario hace clic en varias páginas. Luego no regresa, sino que cambia a la pestaña Cuenta y luego cierra la sesión, permanecerá en la pestaña Cuenta hasta que se actualice.

Descubrí que si el usuario hace clic en la pestaña Inicio y no continúa, cerrará la sesión del usuario correctamente.

Estoy pensando que se trata de llegar a muchas pestañas en el dom y getRootNav no retrocede tanto cuando el usuario ingresa a la segunda página en la pestaña de inicio.

Esto sigue siendo un problema.

Sí, todavía es un problema para mí, ya que estoy usando Tab's como la página de destino principal de la aplicación. Al llamar a _navCtrl.setRoot() desde cualquiera de las páginas dentro de tabComponent, solo esa página se establece en rootPage pero la interfaz de pestañas en la parte inferior permanece en su lugar. ¡Esto me permite acceder a otras páginas en la pestaña!

image

La solución correcta a esto es:

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

o una linea

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

También tengo un problema similar en mi nueva aplicación, mi aplicación funciona solo al presionar primero en el dispositivo, donde realizo la conexión de socket y realizo alguna comunicación de socket. Elimino la aplicación, me desconecto de mi computadora de desarrollo, vuelvo a ejecutar la aplicación, no vi ninguna actividad de conectividad en el lado del servidor. No he implementado la recomendación de uiktiomasfeliz, lo intentaré más tarde hoy. Pero solo un aviso.

Si. También logré lo mismo con:

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

Sin embargo, rompe las rutas de las imágenes en los dispositivos...

(getRootNav) está en desuso y se eliminará en la próxima versión principal. Utilice getRootNavById en su lugar.

Entonces... este error nunca se solucionó y el parche anterior ya no funciona... :/

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

Esto no me funciona...

esto se resolvió con la versión 3.5.3 para mí al menos

welp, 3.5.3 no lo arregló para mí.

chicos y sigo teniendo este problema con la barra lateral que no funciona después de setRoot();

solo uso esto: this.navCtrl.setRoot(HomePage);

Intenté todas las soluciones aquí pero sigo teniendo este problema.
Iónico 3.10.3

yo resolvi asi

importar aplicación

importar {IonicPage, NavController, Nav, App} desde 'ionic-angular';

Y ahora usa

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

Hola, estoy probando la aplicación hello world en un iPhone4 y algunos otros dispositivos con Android.

Última versión de Ionic y CLI.

El gran problema principal es con el iPhone, la llamada a setRoot no funciona.

anular onGoClick(){
// esta línea NO HACE NADA y no arroja ningún error.
this.navCtrl.setRoot(Página de inicio);

// esta línea NO HACE NADA y no arroja ningún error.
this.app.getRootNav().setRoot(HomePage);
}

esto tampoco FUNCIONA

var raíz = this.appCtrl.getRootNav();
root.setRoot(Página de inicio);
raíz.popToRoot();

Saludos.

Hola @alemdg , creo que es la forma en que estás llamando a las rutas, por ejemplo, si defines como un texto o como un objeto, lo que sea,

si quiere evitar problemas, llame como un texto ("HomePage") y cree esta variable

const root = this.app.getRootNav();

y llamar al siguiente método

const root = this.app.getRootNav();
raíz.popToRoot();
root.setRoot("Página de inicio");

importar este objeto

importar {IonicPage, NavController, NavParams, Nav, App} desde 'ionic-angular';

constructor(
aplicación pública: aplicación
) {

primero es popToRoot y segundo define nueva raíz;)

anular onGoClick(){
// esta línea NO HACE NADA y no arroja ningún error.
this.navCtrl.setRoot("Página de inicio");

// esta línea NO HACE NADA y no arroja ningún error.
raíz.popToRoot();
root.setRoot("Página de inicio");
}

esto tampoco FUNCIONA

const raíz = this.appCtrl.getRootNav();
raíz.popToRoot();
root.setRoot("Página de inicio");

@spidermay Gracias por la respuesta, pero aún no funciona.

yo importé
importar {IonicPage, NavController, NavParams, Nav, App} desde 'ionic-angular';

y ejecutado
const root = this.app.getRootNav();
raíz.popToRoot();
root.setRoot("Página de inicio");

pero si hago clic en el botón dos veces funciona....

es como si faltara algo de refresco....

Estoy viendo esto en 3.7.1.

Use el siguiente código, debe funcionar o le dará un mensaje de error

este.menú.cerrar();
this.nav.setRoot(HomePage).then(()=>{
esto.nav.popToRoot();
}).catch(err=>{
alerta(err.toString());
});

Hola @FatehiAlqadasi , gracias.
Se lanza un error, aquí está el registro.

errar:
C@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce@[código nativo]
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
Es decir @ archivo :///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
archivo:///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
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoque@archivo :///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
invocar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
ejecutar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invocarTarea@archivo :///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
invocarTarea@archivo :///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@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invocar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
errar:
C@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21236
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21702
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:7:21967
reduce@[código nativo]
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
Es decir @ archivo :///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
archivo:///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
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:17:19213
invoque@archivo :///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
invocar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:9231
ejecutar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:4458
archivo:///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:14079
invocarTarea@archivo :///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
invocarTarea@archivo :///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@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:2210
invocar@archivo :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/polyfills.js:3:10986
dispatchEvent@[código nativo]
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
[código nativo]
handleTouchEnd@file :///var/containers/Bundle/Application/B7F05CCA-3B74-4F26-A691-B0D9F669E526/SGI.app/www/build/main.js:19:19943
[código nativo]

@tonyawad88
Esto solucionó el problema

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

}

Error de 2 años, todavía nadie se atreve a solucionarlo... Tengo el mismo problema en Ionic 3

Hola a todos,

Puedo obtener todos mis datos de la página raíz y también navegar, pero no puedo navegar por la página fuera de las pestañas, está abierta como un niño de pestañas.

Intenté todas las posibilidades para resolverlo pero ninguna operación funciona.

Pestaña página donde se encuentran mis datos.
1st

Después de hacer clic en los datos obtenidos, se redirigirá a la página de detalles de los datos, fue redirigido pero dentro de la página de pestañas. como esto...

2nd

ayúdame,

Gracias de antemano.

He notado este error a partir de [email protected]. Parece estar asociado con DeepLinkConfig, porque si lo elimino de mi app.module, puedo llamar a nav.setRoot() todo el día sin problemas. Mi hipótesis es que, después de las llamadas subsiguientes de setRoot(), la lógica del enlace profundo entra en un estado en el que la pila de navegación cambia antes de window.location, el código del enlace profundo ve que window.location apunta a una página que no está en el stack (porque ha establecidoRoot() lejos de él), por lo que lo devuelve a la página de la que acaba de intentar navegar.

De todos modos, aquí hay una solución que funciona para mí.

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

Muchas gracias @jknisley ,
Resolví mi problema con esto.

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

Este código también me redirigirá a una página nueva y un diseño diferente (no debajo de la página de pestañas).

Solo dejo esto aquí para la posteridad. Esta función de cierre de sesión parece funcionar para mí sin efectos secundarios. Gracias a @uiktiomasfeliz.

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

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

paquetes globales:

cordova (Cordova CLI) : 7.1.0

paquetes locales:

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

Sistema:

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

Esta es la forma que encontré para configurar una nueva pila de navegación y eliminar la pila de navegación anterior. Esto se hizo para ion-angular 3.9.2

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

¡Gracias por el problema! Este problema se está bloqueando para evitar comentarios que no son relevantes para el problema original. Si esto sigue siendo un problema con la última versión de Ionic, cree un nuevo problema y asegúrese de que la plantilla esté completa.

¿Fue útil esta página
0 / 5 - 0 calificaciones