Отключить аппаратную кнопку возврата в приложении Ionic?
Я пытаюсь отключить кнопку "Назад" в приложении "Кордова".
Я использую AngularJS + Ionic Framework.
Я нашел темы об этом и пробовал код ниже, но он абсолютно не влияет. Есть идеи?
Спасибо!
index.html
<head>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
document.addEventListener("backbutton", function (e) {
e.preventDefault();
console.log("hello");
}, false );
}
</script>
</head>
Обратите внимание, что когда я нажимаю кнопку, у меня появляется "привет" на моей консоли.
Ответы
Ответ 1
Наконец-то нашел ответ на this Ионный форум:
$ionicPlatform.registerBackButtonAction(function () {
if (condition) {
navigator.app.exitApp();
} else {
handle back action!
}
}, 100);
$ionicPlatform.registerBackButtonAction
позволяет полностью перезаписать поведение кнопки "Назад".
Первый параметр - это функция обратного вызова, а вторая - приоритет (выполняется только обратный вызов с наивысшим приоритетом).
Ответ 2
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
}, 100);
это предотвратит функциональность кнопки "Назад".
Ответ 3
Чтобы расширить ответ Давид D, я включил повторную реализацию.
Поместите это в свои приложения. Функция run:
$ionicPlatform.registerBackButtonAction(function (event) {
if ($ionicHistory.currentStateName() === 'someStateName'){
event.preventDefault();
} else {
$ionicHistory.goBack();
}
}, 100);
Это не будет работать в контроллерах, оно широко применяется.
Ответ 4
Простой трюк предотвратит возврат к отдельной странице:
`.controller('DashCtrl', function($scope,$ionicHistory) {
$ionicHistory.clearCache();
$ionicHistory.clearHistory();
})`
Ответ 5
Пример в docs показывает, что прослушиватели событий - даже deviceready
- прикрепляются после события документа onload
уволена.
Использование вашего кода:
function onDeviceReady() {
document.addEventListener("backbutton", function (e) {
e.preventDefault();
console.log("hello");
}, false);
}
document.onload = function () {
document.addEventListener("deviceready", onDeviceReady, false);
};
Ответ 6
Чтобы предотвратить использование функции кнопки "Назад" от кнопки "Назад",
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
}, 100);
Если вы хотите предотвратить использование конкретной страницы,
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
if ($location.path() === "/pagename" || $location.path() === "pagename") {
navigator.app.exitApp();
} else {
$ionicHistory.goBack();
}
}, 100);
Ответ 7
Чтобы отключить обратную функцию оборудования в приложении Ionic для контроллера (или контроллера компонента), вы можете сделать следующее обходное решение, но сначала оно фактически не для самого контроллера, а его комбинация между контроллерами и состоянием в вашем контроллере добавляет ваш обычный код:
var deRegisterHardBack = $ionicPlatform.registerBackButtonAction(
function (event) {
if (youConditionHere) {
event.preventDefault();
// do something
} else {
$ionicHistory.goBack();
}
}, 100);
Но в вашем $stateProvider
добавить disableHardwareBackButton
, как показано ниже:
$stateProvider
.state('app.stateB', {
url: '/page-b/:id',
template: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>',
disableHardwareBackButton : true
});
Внутри вашего модуля ( "приложение" ) функция запуска:
$ionicPlatform.registerBackButtonAction(function(event){
if ($state.current.disableHardwareBackButton){
event.preventDefault();
} else {
$ionicHistory.goBack();
}
}
Таким образом, вы сталкиваетесь с проблемой с "подсектором" или "внутренним контроллером"