it-swarm.com.ru

Отключить аппаратную кнопку возврата в приложении Ionic?

Я пытаюсь отключить кнопку "Назад" в своем приложении Cordova .. Я использую 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>

Обратите внимание, что когда я нажимаю кнопку «назад», в консоли отображается «привет».

27
David D.

Наконец-то нашел ответ на это Ионная ветка форума:

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

$ionicPlatform.registerBackButtonAction позволяет полностью перезаписать поведение кнопки «назад». Первый параметр - это функция обратного вызова, а второй - приоритет (выполняется только обратный вызов с наивысшим приоритетом).

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

это предотвратит функциональность кнопки возврата. 

22
Muhammad Faizan Khan

Чтобы расширить ответ Дэвида Д., я включил реализацию возврата. 

Поместите это в функцию .run вашего приложения:

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

Это не будет работать в контроллерах, это широко применяется.

12
Weston Ganger

Его простой трюк не позволяет вернуться на одну страницу:

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

       })`
4
Niv Kapade

Чтобы приложение не использовало функцию кнопки «Назад» на устройстве,

      $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);
2
S.M.Priya

Пример в docs показывает, что прослушиватели событий - даже deviceready - присоединяются после того, как событие onload сработало.

Используя ваш код:

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

document.onload = function () {
  document.addEventListener("deviceready", onDeviceReady, false);
};
2
Tautologistics

Для Ionic 3:

// root component
export class MyApp {

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

  customBackButtonHandler() {
    ...
  }

}
1
Prashant Ghimire

Чтобы отключить аппаратную кнопку возврата в приложении 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
      });

Внутри вашего модуля ('app'). Запустите функцию:

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

Таким образом, вы можете обойти проблему с «подразделом» или «внутри контроллера»

0
Al-Mothafar