web-dev-qa-db-fra.com

Ionic 4: Application de rechargement du bouton de retour matériel)

Travailler sur un projet et coincé dans un problème:

Application de rechargement du bouton de retour du matériel (j'utilise Angular Router dans cette application).

Mon code pour quitter l'application:

  ionViewDidEnter(){
      this.subscription = this.platform.backButton.subscribe(()=>{
          navigator['app'].exitApp();
      });
  }

  ionViewWillLeave(){
        this.subscription.unsubscribe();
  }

Bien que la même logique fonctionne dans d'autres applications. mais dans cette application son rechargement de l'application ne la quitte pas.

P.S: je l'ai également essayé de mettre dans platform.ready() mais pas de chance.

8
Najam Us Saqib

Résolu:

Comme mentionné par @ rtpHarry le modèle de SideMenu/Tabs a l'historique qui conduit l'application à se recharger automatiquement sur la page racine. j'ai pu résoudre ce problème en effaçant l'historique.

ionViewDidEnter(){
  navigator['app'].clearHistory();    
}

sur votre page racine, effacez simplement votre historique et votre bouton de retour matériel fermera l'application au lieu de la recharger.

2
Najam Us Saqib

Avec IONIC 4 , il y a une nouvelle méthode subscribeWithPriority développée pour gérer la course entre les boutons retour doux et dur. Essayez de modifier votre code comme ci-dessous:

 this.platform.backButton.subscribeWithPriority(1, () => {
        navigator['app'].exitApp();
 });

subscribeWithPriority() arrête la propagation de l'événement après son exécution et si nous nous abonnons avec une priorité élevée et exécutons notre navigation préférée au lieu de celle par défaut, alors cela fonctionnera comme vous le souhaitez.

Plus de documents de référence pour plus de détails:
https://github.com/ionic-team/ionic/commit/6a5aec8b5d76280ced5e8bb8fd9ea6fe75fe6795
https://medium.com/@aleksandarmitrev/ionic-hardware-back-button-nightmare-9f4af35cbfb

MISES À JOUR:

  • Essayez d'utiliser cette nouvelle version de exitApp plugin cordova . Je ne me suis pas essayé mais semble prometteur en termes de popularité.
  • Essayez également de vider la pile de pages de Navcontroller ou accédez à votre écran d'accueil, semble que cela provoque le rechargement de l'application avec les pages & onglet du menu latéral ... this.navCtrl.pop() / this._navCtrl.navigateBack('HomeScreen'), puis appelez exitApp.

REMARQUE: Les onglets et SideMenu, car ceux-ci ont leur propre module de routage, créent beaucoup de complexité avec la navigation dans les applications.

3
Amith Kumar

Avez-vous un menu latéral dans votre application? Je suis juste curieux, car cela semble être le cas lorsque je reçois également ce problème.

Si vous regardez dans votre inspecteur, vous verrez que window.history a une longueur de 1.

Je ne le vois pas dans certaines de mes applications, mais l'application que j'ai configurée dans le menu latéral agit de cette façon - sur la page d'accueil si vous appuyez sur l'écran devient blanc, puis il recharge l'application.

Comme je le dis, regarder dans l'inspecteur montre qu'il y a une histoire à laquelle revenir, ce qu'il essaie de faire, et quelle que soit cette étape de l'histoire, elle la repousse simplement vers la page d'accueil, ce qui m'a fait me demander si c'était le cas le menu latéral configurant sa propre commande du système de navigation.

J'ai probablement dit une terminologie mal formulée, mais comme je n'ai pas résolu cela moi-même, j'ai pensé que je vous ferais simplement savoir ce que j'avais trouvé ... j'espère que cela vous aidera à aller de l'avant.

Dans mon scénario, je n'essayais même pas de faire la sortie sur le code retour - je viens de remarquer que l'application semblerait "redémarrer" si je continuais à appuyer en arrière.

1
rtpHarry