Désactiver le bouton de retour du matériel dans L'application ionique?

J'essaie de désactiver le bouton de retour sur mon application Cordova. J'utilise AngularJS + cadre ionique. J'ai trouvé des sujets à ce sujet et essayé le code ci-dessous, mais cela n'a absolument aucun effet. Une idée? Merci!

Index.html

<head>
    <script>
      document.addEventListener("deviceready", onDeviceReady, false);
        function onDeviceReady() {
            document.addEventListener("backbutton", function (e) {
                e.preventDefault();
                console.log("hello");
            }, false );
        }
    </script>
</head>

Notez que lorsque je repousse le bouton, j'ai" hello " affiché dans ma console.

26
demandé sur David D. 2014-10-24 17:01:03

8 réponses

Enfin trouvé la réponse sur ce Ionique fil de discussion:

$ionicPlatform.registerBackButtonAction(function () {
  if (condition) {
    navigator.app.exitApp();
  } else {
    handle back action!
  }
}, 100);

$ionicPlatform.registerBackButtonAction permet d'écraser complètement le comportement du bouton de retour. Le premier paramètre est une fonction de rappel et le secondune priorité (seul le rappel avec la priorité la plus élevée est exécuté).

36
répondu David D. 2017-02-16 15:08:47
$ionicPlatform.registerBackButtonAction(function (event) {
    event.preventDefault();
}, 100);

Cela empêchera la fonctionnalité du bouton Retour.

21
répondu Muhammad Faizan Khan 2017-02-16 15:08:59

Pour développer la réponse de David d, j'ai inclus la mise en œuvre de retour.

Mettez ceci dans vos applications .run Fonction:

$ionicPlatform.registerBackButtonAction(function (event) {
  if ($ionicHistory.currentStateName() === 'someStateName'){
    event.preventDefault();
  } else {
    $ionicHistory.goBack();
  }
}, 100);

Cela ne fonctionnera pas dans les contrôleurs, il est large application.

12
répondu Weston Ganger 2018-05-06 15:39:53

Son truc simple empêche de revenir à une seule page:

  `.controller('DashCtrl', function($scope,$ionicHistory) {
                $ionicHistory.clearCache();
                $ionicHistory.clearHistory();

       })`
4
répondu Niv Kapade 2016-08-25 14:16:53

L'exemple dans les documents montre que les écouteurs d'événements - même le deviceready - sont attachés après le déclenchement de l'événement onload du document.

En utilisant votre code:

function onDeviceReady() {
  document.addEventListener("backbutton", function (e) {
    e.preventDefault();
    console.log("hello");
  }, false);
}

document.onload = function () {
  document.addEventListener("deviceready", onDeviceReady, false);
};
2
répondu Tautologistics 2014-10-24 13:26:09

Pour empêcher L'application d'utiliser la fonctionnalité du bouton de retour de l'appareil,

      $ionicPlatform.registerBackButtonAction(function (event) {
           event.preventDefault();
      }, 100);

Si vous voulez empêcher l'utilisation de la page particulière,

       $ionicPlatform.registerBackButtonAction(function (event) {
           event.preventDefault();
           if ($location.path() === "/pagename" || $location.path() === "pagename") {
             navigator.app.exitApp();
           } else {
             $ionicHistory.goBack();
           }
        }, 100);
2
répondu S.M.Priya 2016-11-02 09:24:48

Pour désactiver le bouton de retour du matériel dans L'application Ionic pour le contrôleur (ou le contrôleur de Composant), vous pouvez faire la solution de contournement suivante, mais d'abord ce n'est pas pour le contrôleur lui-même, mais la combinaison entre les contrôleurs et l'état, dans votre contrôleur, ajoutez votre code normal:

  var deRegisterHardBack = $ionicPlatform.registerBackButtonAction(
      function (event) {
        if (youConditionHere) {
          event.preventDefault();
          // do something
        } else {
          $ionicHistory.goBack();
        }
      }, 100);

, Mais dans votre $stateProvider ajouter disableHardwareBackButton comme suit:

$stateProvider
      .state('app.stateB', {
        url: '/page-b/:id',
        template: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>',
        disableHardwareBackButton : true
      });

Dans votre module ('app').fonction d'exécution:

$ionicPlatform.registerBackButtonAction(function(event){
   if ($state.current.disableHardwareBackButton){
      event.preventDefault();
   } else {
      $ionicHistory.goBack();
   }
}

De cette façon, vous contournez le problème avec "sous-section" ou " inside contrôleur"

0
répondu Al-Mothafar 2016-11-27 09:54:31

Pour Ionique 3:

// root component
export class MyApp {

  constructor(platform: Platform) {
    platform.ready().then(() => {
      platform.registerBackButtonAction(() => {
        this.customBackButtonHandler();
      }, 100)
    });
  }

  customBackButtonHandler() {
    ...
  }

}
0
répondu Prashant Ghimire 2018-04-16 18:30:36