Ionic-framework: Ionic2 - nav.setRoot(Component) - Funciona apenas na primeira vez, incapaz de navegar depois, sem erros relatados

Criado em 18 mar. 2016  ·  100Comentários  ·  Fonte: ionic-team/ionic-framework

Breve descrição do problema:

Estou desenvolvendo um aplicativo com Ionic2. Tenho App.ts como pai, Welcome.ts como página filha e Featured.ts como página filha também. Tenho o Firebase integrado ao aplicativo. Rootpage é definido primeiro como Welcome.

this.rootPage = Welcome;

Etapa 1: clico em um botão em Bem-vindo ao autenticar com o Google, uma vez que onAuth é chamado, defino this.nav.setRoot(Featured); Tudo funciona bem até agora. Eu chego à página em destaque que permite um menu lateral com páginas diferentes e posso navegar para todas elas sem problemas.

Passo 2: Featured habilita um sidemenu de App.ts/html, lá eu tenho um botão de logout que chama unauth.
Unauth faz uma unauth do Firebase e depois:

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

Passo 3: Faça o login novamente como no passo 1. Tudo está bem até agora.

Passo 4: Abra o menu lateral, selecione qualquer uma das páginas do menu lateral, a navegação não ocorre. o menu lateral fecha, mas a página permanece a mesma, o botão do ícone da barra de navegação desaparece e não ocorre navegação.
código da página aberta:

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

Que comportamento você está esperando?

Espero que a navegação continue a ocorrer, semelhante ao que acontece na etapa 1.

Passos para reproduzir:
Etapas para reproduzir incluídas acima.

Code included above.

Outras informações: (por exemplo, stacktraces, problemas relacionados, sugestões de como corrigir, links de stackoverflow, links de fórum, etc.)
Nenhum erro está sendo lançado infelizmente. Não vejo nenhum erro nos logs do console.

Qual versão iônica? 2.x

Execute ionic info no prompt do terminal/cmd: (cole a saída abaixo)

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 

Obrigada.

reply

Comentários muito úteis

Por que esta questão está encerrada? A navegação parece realmente quebrada. Se eu empurrar uma página com formulários, ela também não funcionará.

Todos 100 comentários

Percebi o seguinte: 2 páginas de íons estão presentes ao mesmo tempo no dom.
screen shot 2016-03-18 at 3 34 03 pm

O que eu naveguei é "explorar", que tem um z-index (92) menor do que a página "em destaque". Portanto, eu deveria estar no explore, mas o "destaque" é sobreposto ao "explorar" com um índice z de 93.

Estou enfrentando o mesmo problema, mas no meu caso não consigo ser redirecionado após o login.

Se eu já estiver logado e chegar na visualização de login, nav.setRoot(TabsPage) é executado perfeitamente.

Mas se eu logar com o facebook depois de pegar o usuário probile nav.setRoot(TabsPage) não faz nada. Além disso, nav.push(TabsPage) também não está fazendo nada, mas se eu fizer nav.push(Main) onde Main é uma das minhas guias, está executando corretamente, mas não tenho tabbar e um botão voltar aparece, obviamente.

Além disso, se eu fizer nav.setRoot(Main) , funciona corretamente, mas aterro em uma guia sem tabbar e com o botão voltar.

Acrescento algumas informações. Eu vi nos documentos que setRoot retorna uma promessa, então fiz isso:

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

Isso lança true quando entro na página de login e já estou logado, mas não lança nada quando entro com o facebook, então parece que a promessa nunca é resolvida.

Pronto, outra atualização. Se você for ao núcleo do Ionic2 para components/nav/nav-controller.js na função setPages que é chamada de setRoot o callback da transição nunca será executado.
Se você seguir o fluxo de funções chamadas: setRoot -> setPages -> _transition -> _render -> _postRender

Na função _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);
    }
});

Meu código entra em enteringView.onReady e o retorno de chamada nunca é executado.

Se eu apenas chamar o método _postRender antes de esperar por enteringView.onReady meu aplicativo funciona bem, mas é tão sujo.
O problema parece estar esperando a página da aba ficar pronta. Acho que nunca fica pronto ou nunca adquire bem o estado pronto.

Poderia ser isso algo com o meu código? Ou é provável que seja um bug?

Obrigada!

Eu tenho o mesmo problema com a autenticação do Google ou do Facebook

@privetr isso parece ter sido corrigido com beta4. Por favor, pode verificar? O meu está funcionando bem agora.

@jorchg Você pode verificar também? quando tiver oportunidade :)

Olá a todos! Como parece que isso foi corrigido na versão beta.4, fecharei este problema, mas se você ainda estiver com esse problema, sinta-se à vontade para comentar!

Ainda estou com esse problema. Não consigo fazer o nav empurrar ou definirRoot para o meu TabsPage após uma promessa de login do 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

Também estou enfrentando a situação em que, se eu chamar nav.setRoot(x), a nova página não aparecerá. No entanto, se eu focar um campo de entrada na página atual, ele desaparece e mostra a página correta.

Além disso, se eu empurrar para a pilha em vez de setRoot, a animação não acontece até que eu foque um campo de entrada.

Mesmo problema.

Edit: Acabei de trocar a navegação no meu aplicativo para um menu lateral e tudo está funcionando bem. Portanto, as guias são borked a partir do beta 4 FYI.

@daveshirman você está usando guias para navegar? Pode estar relacionado a guias, meu problema estava relacionado ao menu lateral. No entanto, ambos usam o navcontroller, não sei por que funcionaria para mim e não para você. Talvez produza um plunker ou abra um novo problema e a equipe iônica poderá ajudar.

Eu estava tendo o mesmo problema: nav.setRoot(MyComponent) não parecia fazer nada. Eu estava executando o aplicativo no Android usando --live-reload e havia avisos sobre alguns eventos não serem acionados:

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

Também não consegui testar o código no navegador porque se trata de exibir uma determinada página quando o aparelho fica offline.

Então, finalmente tentei executar meu código no Android, mas sem o recarregamento ao vivo, e funciona bem.

Portanto, há algo no modo de recarga ao vivo que o impede de funcionar. Usando Beta4 como minha dependência e a versão CLI 2.0.0-beta25.

Ainda estou com o problema que descrevi. Eu esqueci completamente e, após uma atualização iônica, ele parou de funcionar, então apenas modifiquei novamente, conforme descrito no meu último post neste tópico.

Devo abrir outro assunto?

Olá a todos. Alguém encontrou uma correção para isso? Atualmente estou usando o Ionic [email protected] e o problema ainda está presente!

Descobri que a causa do meu problema estava chamando .pop() quando apenas setRoot havia sido chamado.

Descobri que chamá-lo do meu app.ts parece funcionar de forma confiável. Chamá-lo de qualquer outra página parece falhar.
Além disso, se eu não estiver em uma página raiz, como 3 páginas de profundidade, também chamo nav.popToRoot() após o método setRoot, que funciona:

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

Por que esta questão está encerrada? A navegação parece realmente quebrada. Se eu empurrar uma página com formulários, ela também não funcionará.

Também quebra quando há uma janela modal mostrando também.
Em 13 de julho de 2016 03h59, "scorpnode" [email protected] escreveu:

Por que esta questão está encerrada? A navegação parece realmente quebrada. Se eu empurrar uma página
com formulários nele também não funcionará.


Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/driftyco/ionic/issues/5883#issuecomment -232241198,
ou silenciar o thread
https://github.com/notifications/unsubscribe/ANnlXmqTT5pf0i-JZNog5F32j8pB785Qks5qVFSZgaJpZM4H0Jz0
.

Oi, isso ainda está ocorrendo para mim em 2.0.0-beta.10. Estou recebendo uma tela em branco depois de chamar NavController.setRoot. Ocorrendo apenas em dispositivos iOS

informação do dispositivo:

  • modelo: iPad5,4
  • Versão do iOS: 8.3

Estou enfrentando esse problema em 2.0.0-beta.10 . Não consigo navegar para a próxima página pelo NavController.setRoot. Meu código está assim:

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

informação do dispositivo:

  • modelo: motorala x play
  • versão android: 6

CLI v2.0.0-beta.32.

Ainda tendo problemas com
this.nav.setRoot(ListPage)
de hello-ionic.ts do aplicativo tutorial inicial.

Eu queria tentar o login do FB, que foi facilitado com a v2.

Alguém mais?

[Editar]
eu estava usando
import {Nav} from 'ionic-angular';
em vez de
import {NavController} from 'ionic-angular ';

Resolvido meu problema. Espero que ajude alguém

Tenho o mesmo problema aqui!
Existe alguma correção a partir de agora?

Olá a todos, se alguém puder fornecer um plunker que demonstre esse problema, seria incrível. Obrigado por usar o Ionic!

Olá a todos! Como parece que já faz um tempo desde que houve qualquer atividade sobre esse assunto, vou fechá-lo por enquanto. Sinta-se à vontade para comentar se ainda estiver enfrentando esse problema. Obrigado por usar o Ionic!

Desculpe não responder, estava de férias 💃

Meu problema parece estar relacionado a cordova-plugin-facebook4 https://github.com/jeduan/cordova-plugin-facebook4

Quando atualizei meu projeto para beta.10 e comecei a usar o wrapper do Facebook do ionic-native, o problema simplesmente parou. Muito estranho, levando em conta que o wrapper usa o mesmo plugin.

Muito obrigado!

Sem problemas, que bom que foi corrigido para você!

Oi @jgw96 ! Infelizmente, isso ainda parece ser um problema para mim no Beta 10. Você pode ver isso no plnkr abaixo. Efetivamente, eu tenho um modal de login que define a raiz para uma página "Tabs" uma vez logado com sucesso. De uma página nas "Tabs" eu tenho um botão "Logout", que dispara um evento que é consumido em app.ts. Em app.ts eu tento definir a raiz para o "LoginPage", mas nada parece acontecer. Ao olhar para o DOM enquanto clico em "logout", posso ver as coisas disparando, e a página de login existe abaixo das guias, mas a navegação simplesmente não parece ocorrer. Alguma ideia?

http://plnkr.co/edit/n6jCzspnEcjQbl9KF10F

Obrigado pelo seu tempo!

Eu arquivei um novo problema para este # 7593. Aplicável a 2.0.0-beta.10 e 11, possivelmente outros.

Estou com o mesmo problema com o beta 11.
A navegação parece funcionar bem até que this.nav.setRoot(xxx) seja chamado. Depois disso, a navegação funciona aleatoriamente... Ao empurrar uma nova página, às vezes nada acontece: a visualização fica na página atual em vez da nova. Ao aparecer, a navegação parece outras vezes aparecer duas vezes.
Tudo parece estar correto com o objeto NavController e tudo dispara normalmente. Mas parece que há confusão no DOM: os valores das propriedades do z-index para as tags ion-page estão errados nesses casos, de modo que a página errada fica acima.

Eu vejo exatamente o mesmo comportamento do @Troknus em relação ao popping de página dupla e confusão do DOM.

Também na primeira vez setRoot, depois na próxima navegação, a página raiz inicial pisca, como se não tivesse sido completamente descarregada antes.

Eu também tenho o problema do @Troknus , tento adicionar a classe show-page manualmente e a função, mas não é uma boa solução.

Procuro em todos os sites mas nada. Eu tento todas as soluções possíveis, mas tudo está em vane.

na versão beta 10. A navegação funciona perfeitamente. Por que não na versão beta 11.

Estou vendo o mesmo comportamento do @Troknus também.

Pessoal, tendo o mesmo problema que o @jorchg disse .. considerando o erro de guias .. ele apenas empurra para guias após a segunda vez que chama (parece que o push ocorre, mas a página atual ainda está no topo)

após o login, se eu tentar enviar para a visualização de guias, mas não funcionar .. se eu enviar para uma página que deveria estar em uma guia .. funciona .. aqui está o projeto

Eu tenho o mesmo problema que @Troknus

@schaergeek atualizado para beta 11 e funcionou .. aqui está o exemplo https://github.com/mariohmol/ionic2-meteor-messenger-password

Eu dei um joinha no Troknus, mas acho que um post é mais claro.

Esta navegação é um problema real.
Nós (e suponho que muitas outras pessoas) não temos permissão para entrar em produção com esse bug.
(Estamos trabalhando no beta 11 como Troknus e temos o mesmo...).

Dei uma olhada no plnkr de @joshgarwood. A publicação do evento parece ser o problema? Se, em vez de publicar o evento de autenticação para que MyApp faça o trabalho, você defina a raiz por meio da instância NavController em TabPage, ele funcionará. Tentar definir a raiz por meio do ouvinte de eventos em MyApp não funciona. Então me parece um problema com as diferentes instâncias do NavController que estão sendo injetadas...? Não tenho certeza de como o DI deve funcionar aqui, mas sinto que o consumidor não deveria se preocupar com qual instância do NavController é injetada. Se eu chamar setRoot(*) então as coisas devem funcionar, certo?

Em relação ao problema do índice Z de que o @Troknus está falando, todos vocês podem estar interessados ​​na edição #8042. Embora nesse caso setRoot(*) não esteja sendo chamado.

Na verdade, acabei de ler o comentário de @jgw96 e parece que você não deveria usar instâncias aleatórias do NavController...?

Ainda assim, isso não muda o fato de que há um bug com os índices Z.

mesmo problema aqui com beta11...

Alguém tem um plnkr diferente que irá reproduzir o DOM ficando confuso ou as páginas piscando? O plnkr de @joshgarwood não inclui pushes ou pops.

@rcjsuen Tive o mesmo problema no Beta10 e Beta11, descobri essa solução alternativa. Não tenho certeza se setRoot está funcionando como pretendido, mas isso funciona por enquanto.

Não está funcionando

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

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

      StatusBar.styleDefault();
    });
  }
}

Trabalhando

 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 Tem o mesmo problema - mas mesmo essa solução que você propôs não funcionou para mim.
Meu código era como seu para começar - então tentei atualizar para ionic 2 rc0 e angular 2.0.1, mas isso não funcionou bem com o firebase (nem angularfire), então voltei para:

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

deletei node_modules/ fez o npm install e agora estou enfrentando esse problema.

O estranho é que se eu definir this.rootPage para algo fora da função de retorno de chamada, o aplicativo navegará para essa página. Por exemplo

        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á pelo usuário até o TeamPage e depois navegará pelo usuário para o LoginPage (nos casos em que o usuário não estiver logado)

Contudo

        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 vai navegar o usuário em qualquer lugar

@Peter-Piper

Não atualizei, mas continuei tendo alguns problemas que desapareceram quando atualizei para o RC0. Para um dos meus projetos também estou usando o Firebase e tive alguns problemas para atualizar, mas agora tudo está funcionando.

Eu não uso o AngularFire, mas este tutorial cobre isso: https://playcode.org/getting-started-with-ionic-2-rc0-firebase-3-angularfire-2/

EDIT: Aqui está um exemplo rápido que fiz

@Vanclief

Obrigado, eu já tentei essa abordagem - e funcionou. Mas o fato de eu ter que fazer hacks em um módulo de nó combinado com RC_0 iônico travando ao assistir arquivos ao fazer ionic serve me fez abortar a atualização e ficar com a versão mais antiga.

De qualquer forma, resolvi o problema mencionado acima, onde a configuração da página raiz em um retorno de chamada nunca funciona, a menos que tenha sido definida antes, verificando se firbase.auth.currentUser está definido e, em seguida, definindo o 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);
        });

e, em seguida, fazer uma verificação no método setRoot para que ele não navegue para a mesma página duas vezes.

Este também é um hack e não resolve o problema subjacente. Infelizmente, não tenho tempo para uma investigação aprofundada do problema na próxima semana.

Isso ainda é um problema. Usar this.nav.push(...) funciona bem, mas usar this.nav.setRoot(...) não funciona após a primeira vez. Aqui está minha informação 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

Do pacote.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 que isso está fechado? Claramente este é um caso em aberto, pois setRoot não está funcionando corretamente.

@daveshirman , eu estava enfrentando o mesmo problema, não é um problema de navegação, mas aqui está como resolvi.

no meu app.ts tem isso

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

a instrução if acima está dizendo // Se houver um usuário SET THE ROOTPAGE TO TabsPage page.
e então ele deve permanecer na LoginPage, você notará que se você usar o método de login normal do Firebase, a parte if será executada (ou seja, ele navegará para a página root, mas ao usar o Facebook a parte else será executada (ou seja, permanecerá na Página de login

Eu resolvi assim.
entrar no Facebook() {

//entrar no facebook
Facebook.login(['email']).then((resultado=>{
// definir credenciais, você usará isso para fazer login no firebase
let credenciais = firebase.auth.FacebookAuthProvider 'credential'
// faça login no firebase, é isso que está impedindo que a navegação funcione, levando ao caminho ELSE da //instrução no app.ts a ser executado
return firebase.auth().signInWithCredential(credentials);
})).then((usuário)=>{
//alert(firebase.auth().currentUser.uid);
this.userProfileRef.child(firebase.auth().currentUser.uid).set({
id:firebase.auth().currentUser.uid,
e-mail: usuario.email,
displayName:user.displayName,
profilePictureURL:user.photoURL
});

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

}

o que aconteceu no código acima é que,
1º você precisa fazer login no facebook, o que eu fiz com
Facebook.login(['email']).then((resultado=>

2º você precisa definir uma credencial que o ajudará a fazer login no firebase usando o accessToken enviado a você pelo resultado de login do Facebook, que foi o que eu fiz aqui
let credenciais = firebase.auth.FacebookAuthProvider 'credential' ;
3º você precisa fazer login no firebase com as credenciais que você definiu, que foi o que eu fiz aqui
return firebase.auth().signInWithCredential(credentials);
NOTA: esta é a razão exata pela qual seu this.navCtrl.setRoot(TabsPage); não funcionou (porque o usuário ainda não fez login no firebase.

então agora você pode navegar para o rootPath no caminho then() do código.

e por favor, certifique-se de que seu appId e appSecrete do facebook estejam configurados no firebase>authentication>facebook panel.

ESPERO QUE AJUDE

@OyebisiJemil Obrigado por sua longa explicação do que você fez. Mas eu quis dizer que eu estava tendo o mesmo problema conceitualmente em que setRoot não funciona corretamente, não com o uso do facebook ou algo assim. Obrigado novamente. Este problema não deve ser fechado, a menos que haja outro aberto com a mesma descrição.

Que aparentemente existe:

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

Eu também estou enfrentando esse problema com circunstâncias muito semelhantes. No meu caso, mudar para push(view) em vez de setRoot(view) resolveu o problema e realmente não conecta com o fluxo do meu aplicativo.

Eu tenho o mesmo problema. nav.push(view) funciona bem, mas nav.setRoot não funciona. Alguém tem alguma sugestão?

Ainda estou enfrentando o mesmo problema a partir de hoje na última compilação:

sair() {
this.authData.logoutUser().then(() => {
this.nav.setRoot(LoginPage);
});
}

não funciona. Pf ajuda. Obrigado. Li

Use push no lugar de setRoot...

@jgw96 , @adamdbradley isso ainda é um grande problema. Reabra-o e atribua um marco. Muitas pessoas estão tendo esse problema, inclusive eu e é uma funcionalidade essencial para um aplicativo.

@dejancencelj que não é uma solução para esse problema.

@lisaiceland para contornar esse problema, segui esta sugestão:
https://forum.ionicframework.com/t/cant-access-rootnav-after-upgrade-to-beta-11/59889/15?u=niallr

@niallr12 @daveshirman isso ainda é um problema no RC3?

@manucorporat Não tenho certeza se isso é um problema no RC3, mas não vejo uma correção para isso no changelog. Estou feliz com minha correção e sinto que é uma abordagem geral melhor de qualquer maneira.

Posso testar para você em RC3, se quiser.

@niallr12 bem, nunca consegui reproduzir esse problema específico. Mas passei semanas fortalecendo o NavController, com toneladas de pequenas correções e testes. Como este: Pior Caso que estressa a pilha de navegação com um fluxo maluco.

Eu seria muito útil se você pudesse testar este bug contra o RC3.

@manucorporat ainda consigo replicar o problema no rc3. No meu caso particular, não parece estar descartando a visão atual quando estou configurando root. Se eu descartar a visão atual e, em seguida, definir root, ela funcionará bem. Empurrar a visualização funciona completamente bem.

Ei,

Não tenho certeza se minha resposta ajudará alguém, pois não li todas as mensagens anteriores, mas quando encontrei esse problema no meu projeto, resolvi-o referindo-me à pilha de navegação pai, por esse motivo, consegui voltar para página de boas-vindas, por exemplo:

Página de boas-vindas (página raiz)

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

Página de recursos ( com guias )

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

Ele precisa ser tratado dessa maneira, pois as guias têm sua própria pilha de navegação, o que significa que todo uso de setRoot no nível de objeto de navegação de guias redirecionará para uma página diferente, mas o bloco de guias no rodapé ainda estará visível.

Por que este assunto está encerrado? Eu tenho o mesmo problema. Estou usando a função setRoot no meu provedor de amostra. App setRoot e página alterada, mas a navegação (menu) é desabilitada quando terminada.

É meu código no provedor

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

São minhas informações

Córdoba CLI: 6.3.1
Versão do Ionic Framework: 2.0.0-rc.3
Versão Ionic CLI: 2.1.4
Versão Ionic App Lib: 2.1.2
Versão de scripts de aplicativos Ionic: 0.0.45
versão de implantação do ios: 1.9.0
versão ios-sim: 5.0.9
SO: Mac OS X Sierra
Versão do nó: v6.9.1
Versão do Xcode: Xcode 8.1 Build versão 8B62

Eu tive mesmo problema. No entanto, depois de garantir que, a qualquer momento, se apenas a instrução setrroot for executada, tudo funcionou perfeitamente. Mas por várias razões, se várias instruções setroot são executadas a qualquer momento, ou seja, antes da renderização, o Ionic está criando várias páginas devido às quais a navegação está sendo travada no meu caso.

Parece que esse problema mudou para algo estranho no RC4. Mesmo tipo de problema, exceto que ao definir root agora da página de login de exemplo para um menu/painel, a página de login permanece na pilha de exibição que exibe o botão Voltar no cabeçalho, causando todos os tipos de confusão

Sou forçado a fazer um location.reload para explicar isso, o que acho que não é uma experiência terrível do usuário, pois só acontece durante o registro de um novo usuário, mas ainda assim ... as pessoas ainda estão com o problema.

Eu crio evento para logout.

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

agora saia:

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

Olá a todos. Alguém encontrou uma correção para isso? Atualmente estou usando o Ionic 2.0.0-rc.4 e o problema ainda está presente!

Oi,

//importa essas classes
 import { Componente, ViewChild } de '@angular/core';
 import { Platform, MenuController, Nav } from 'ionic-angular';

 exportar classe MeuAplicativo {
 //Defina esta propriedade
 @ViewChild(Nav) nav: Nav;

 //implementa este método e funciona perfeitamente
 private openPage(page: any): any {
 //valida o token 
 this.loggedIn = this.service.canActivate();
 if (!this.loggedIn) {
 //não logado 
 this.nav.setRoot(LoginPage);
 } senão {
 // logado
 this.nav.setRoot(HomePage);
 }
 this.menuCtrl.close();
 }

Abraços!

Meu aplicativo: 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);
  }

Alguém encontrou pelo menos uma solução alternativa para isso?

Mesmo problema que @joshuaohana.

Se eu fizer setRoot ANTES do login do facebook, tudo funcionará como esperado.
Se eu fizer setRoot AFTER facebook, recebo o mesmo comportamento que @joshuaohana.

Obrigado.

(Apenas encontrei esta duplicata: https://github.com/driftyco/ionic/issues/6297)

criar evento para trabalhos de logout.

Além disso, encontre abaixo uma explicação detalhada sobre nav com outra solução de trabalho

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

parte mais valiosa do código colado abaixo.

import { App } de 'ionic-angular';
...
constructor(private _app: App) {}

sair() {
...

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

}
...

Talvez alguns de vocês tenham cometido o mesmo erro que eu:

Eu usei a navegação via "setRoot", mas perdi que ao mesmo tempo a ligação "[root]=.." ainda está disponível no modelo HTML. Trazer as duas informações em sincronia novamente resolveu meu problema. Nesse caso, removi o model binding e gerenciei a raiz apenas via API.

Abraços, Miguel

Oi pessoal,

A solução @ly-dev funcionou para mim. Acabei de fazer this._app.getRootNav().setRoot(EntryPage); e funcionou.

Primeiro, importe Nav de ionic-angular, mesmo lugar que navController
import { App, NavController } from 'ionic-angular';

em seguida, forneça-o em seu construtor:
constructor(public navCtrl: NavController, public appCtrl: App)

agora você pode acessar o rootnav:
this.appCtrl.getRootNav().setRoot(YourComponent);

@AmitPoojary Essa solução não funcionou. Quando o usuário acessa várias guias.

Exemplo : guia inicial com várias páginas. Quando o usuário clica em várias páginas. Em seguida, não volta, mas muda para a guia Conta e, em seguida, faz logout, ele permanecerá na guia Conta até a atualização.

Descobri que se o usuário clicar na guia Início e não for mais, ele desconectará o usuário corretamente.

Estou pensando que é tudo sobre como chegar a muitas guias no dom e getRootNav não voltará tão longe quando o usuário for para a segunda página na guia inicial.

Isso ainda é um problema.

Sim, ainda é um problema para mim, pois estou usando o Tab como a página principal do aplicativo. Ao chamar _navCtrl.setRoot() de qualquer uma das páginas dentro do tabComponent, apenas essa página é definida como rootPage, mas a interface da guia na parte inferior permanece no lugar. Isso me permite ainda acessar outras páginas na guia!

image

A solução certa para isso é:

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

ou uma linha

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

Eu também tenho problema semelhante no meu novo aplicativo, meu aplicativo está funcionando apenas primeiro push para o dispositivo, onde faço conexão de soquete e executo alguma comunicação de soquete. Eu mato o aplicativo, desconecto do meu computador de desenvolvimento, executo o aplicativo novamente, não vi nenhuma atividade de conectividade no lado do servidor. Eu não implementei a recomendação uiktiomasfeliz, vou tentar isso ainda hoje. Mas apenas um alerta.

sim. Eu também consegui o mesmo com:

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

No entanto, ele quebra os caminhos das imagens nos dispositivos...

(getRootNav) está obsoleto e será removido na próxima versão principal. Em vez disso, use getRootNavById.

Então... esse erro nunca foi corrigido e o patch anterior não está mais funcionando.. :/

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

Isso não está dando certo para mim...

isso foi resolvido com a versão 3.5.3 para mim pelo menos

bem, 3.5.3 não corrigiu para mim.

pessoal e ainda tendo esse problema a barra lateral não funciona após setRoot();

eu só uso isso: this.navCtrl.setRoot(HomePage);

Eu tentei todas as soluções aqui, mas ainda tenho esse problema
Iônico 3.10.3

eu resolvi assim

importar aplicativo

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

E agora use

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

Olá, estou testando um aplicativo olá mundo em um iPhone4 e alguns outros dispositivos com Android.

Última versão Ionic e CLI.

O grande problema principal é com o iPhone, a chamada para setRoot não está funcionando.

void onGoClick(){
// esta linha NÃO FAZ NADA e nenhum erro é lançado.
this.navCtrl.setRoot(HomePage);

// esta linha NÃO FAZ NADA e nenhum erro é lançado.
this.app.getRootNav().setRoot(HomePage);
}

isso também NÃO FUNCIONA

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

Saudações.

Oi @alemdg eu acho que é a maneira como você está chamando as rotas, por exemplo se você definir como um texto ou como um objeto, tanto faz,

se você quiser evitar problemas, chame como um texto ( "HomePage" ) e crie esta variável

const root = this.app.getRootNav();

e chame o seguinte método

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

importar este objeto

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

construtor(
aplicativo público: aplicativo
) {

o primeiro é o popToRoot e o segundo define a nova raiz ;)

void onGoClick(){
// esta linha NÃO FAZ NADA e nenhum erro é lançado.
this.navCtrl.setRoot( "HomePage" );

// esta linha NÃO FAZ NADA e nenhum erro é lançado.
root.popToRoot();
root.setRoot("HomePage");
}

isso também NÃO FUNCIONA

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

@spidermay Obrigado pela resposta, mas ainda não está funcionando.

eu importei
import { IonicPage, NavController, NavParams, Nav, App } de 'ionic-angular';

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

mas se eu clicar no botão duas vezes ele funciona ....

é como se alguma atualização estivesse faltando....

Estou vendo isso em 3.7.1.

Use o código a seguir, ele deve funcionar ou fornecer uma mensagem de erro

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

Olá @FatehiAlqadasi , obrigado.
Um erro é lançado, aqui está o log.

errar:
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
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
Ie@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
errar:
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
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
Ie@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@[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
Isso corrigiu o problema

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

}

Bug de 2 anos, ainda ninguém se atreve a corrigi-lo... Estou tendo o mesmo problema no Ionic 3

Olá a todos,

Posso obter todos os meus dados da página raiz também navegar, mas não posso navegar pela página fora das guias, é aberto como um filho de guias.

Tentei todas as possibilidades para resolvê-lo, mas nenhuma operação funciona.

Tab page onde meus dados.
1st

Depois de clicar nos dados buscados, ele redirecionará para a página de detalhes dos dados, foi redirecionado, mas dentro da página da guia. como isso...

2nd

me ajude,

Desde já, obrigado.

Eu notei esse bug a partir de [email protected]. Parece estar associado ao DeepLinkConfig, porque se eu removê-lo do meu app.module, posso chamar nav.setRoot() o dia todo sem problemas. Minha hipótese é que, após chamadas subsequentes de setRoot(), a lógica do link direto entra em um estado em que a pilha de navegação muda antes de window.location, o código do link direto vê que window.location aponta para uma página que não está no stack (porque você separouRoot() dele), e assim ele retorna para a página que você acabou de tentar navegar.

Independentemente disso, aqui está uma solução alternativa que funciona para mim.

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

Muito obrigado @jknisley ,
Resolvi meu problema com isso.

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

Este código me redirecionará para uma nova página e um layout diferente (não na página da guia) também.

Só deixando isso aqui para a posteridade. Esta função de logout parece estar funcionando para mim sem efeitos colaterais. Obrigado ao @uiktiomasfeliz.

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

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

pacotes globais:

cordova (Cordova CLI) : 7.1.0

pacotes locais:

@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 é a maneira que encontrei para definir uma nova pilha de navegação e remover a pilha de navegação antiga. Isso foi feito para íon-angular 3.9.2

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

Obrigado pelo problema! Este problema está sendo bloqueado para evitar comentários que não sejam relevantes para o problema original. Se isso ainda for um problema com a versão mais recente do Ionic, crie um novo problema e verifique se o modelo está totalmente preenchido.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

manucorporat picture manucorporat  ·  3Comentários

BilelKrichen picture BilelKrichen  ·  3Comentários

alan-agius4 picture alan-agius4  ·  3Comentários

MrBokeh picture MrBokeh  ·  3Comentários

fdnhkj picture fdnhkj  ·  3Comentários