¿Deshabilitar el botón de retroceso del hardware en la aplicación iónica?
Estoy intentando inhabilitar el botón de la parte posterior en mi app de Cordova. Estoy utilizando AngularJS + marco iónico. Encontré temas sobre esto y probé el código abajo, pero no tiene absolutamente ningún efecto. ¿Alguna idea? ¡Gracias!
Index.html
- ¿Cómo enviar / recibir notificaciones push de la aplicación móvil iónica?
- Error de compilación iónica: no ha aceptado los acuerdos de licencia de los siguientes componentes de SDK:
- Los permisos de ACCESS_FINE_LOCATION se actualizan con uses-feature en la aplicación móvil de Ionic
- ionic con "SplashScreen.java utiliza o reemplaza una API obsoleta". error
- Cordova, recibiendo Error al agregar plataforma android en Ubuntu 14.04
<head> <script> document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { document.addEventListener("backbutton", function (e) { e.preventDefault(); console.log("hello"); }, false ); } </script> </head>
Tenga en cuenta que cuando vuelvo a pulsar el botón, tengo "hola" en mi consola.
- HTTPS bloqueado para la construcción iónica - release android apk
- Ionic Android apk no tiene acceso a Internet
- Mostrar notificación de inserción múltiple en la barra de estado en android de Córdoba
- ¿Cómo instalar el marco iónico en Ubuntu?
- No se puede conectar a localhost desde el dispositivo Android
- Ripple no puede encontrar config.xml después de actualizar el proyecto cordova al estudio visual 2015
- zipalign: comando no encontrado
- Hacer una llamada HTTP POST en Ionic 2 da la respuesta prohibida
Finalmente encontré la respuesta en este hilo del foro de Ionic:
$ionicPlatform.registerBackButtonAction(function () { if (condition) { navigator.app.exitApp(); } else { handle back action! } }, 100);
$ionicPlatform.registerBackButtonAction
permite sobrescribir completamente el comportamiento del botón anterior. El primer parámetro es una función de devolución de llamada y el segundo una prioridad (sólo se ejecuta la devolución de llamada con la prioridad más alta).
$ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); }, 100);
Esto evitará la funcionalidad del botón de retroceso.
Para ampliar la respuesta de David D he incluido la implementación de volver atrás.
Ponga esto en su función de aplicaciones .run:
$ionicPlatform.registerBackButtonAction(function (event) { if ($ionicHistory.currentStateName() === 'someStateName'){ event.preventDefault(); } else { $ionicHistory.goBack(); } }, 100);
Esto no funcionará en los controladores, es amplia aplicación.
Su simple truco evitar volver a una sola página:
`.controller('DashCtrl', function($scope,$ionicHistory) { $ionicHistory.clearCache(); $ionicHistory.clearHistory(); })`
El ejemplo en la documentación muestra los oyentes de eventos, incluso el deviceready
, que se adjunta después de que el evento de deviceready
documento se ha disparado.
Usando su código:
function onDeviceReady() { document.addEventListener("backbutton", function (e) { e.preventDefault(); console.log("hello"); }, false); } document.onload = function () { document.addEventListener("deviceready", onDeviceReady, false); };
Para evitar que la aplicación de la funcionalidad del botón de retroceso del dispositivo se utilice,
$ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); }, 100);
Si desea evitar el uso de la página en particular,
$ionicPlatform.registerBackButtonAction(function (event) { event.preventDefault(); if ($location.path() === "/pagename" || $location.path() === "pagename") { navigator.app.exitApp(); } else { $ionicHistory.goBack(); } }, 100);
Para desactivar el botón de hardware atrás en la aplicación de Ionic para el controlador (o controlador de componente), puede hacer la siguiente solución, pero en primer lugar no es para el controlador en sí, pero la combinación entre los controladores y el estado, en su controlador, agregue su código normal :
var deRegisterHardBack = $ionicPlatform.registerBackButtonAction( function (event) { if (youConditionHere) { event.preventDefault(); // do something } else { $ionicHistory.goBack(); } }, 100);
Pero en su $stateProvider
agregue disableHardwareBackButton
como el siguiente:
$stateProvider .state('app.stateB', { url: '/page-b/:id', template: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>', disableHardwareBackButton : true });
Dentro de tu módulo ('app') Función run:
$ionicPlatform.registerBackButtonAction(function(event){ if ($state.current.disableHardwareBackButton){ event.preventDefault(); } else { $ionicHistory.goBack(); } }
De esta manera usted consigue alrededor del problema con la "sub sección" o "dentro del regulador"
- Cómo generar enlaces a la referencia de las clases de android en javadoc?
- Ocultar teclado al navegar de un fragmento a otro