Нажатие кнопки "Назад" закрывает приложение вместо возврата на предыдущую страницу

Если нажать любую кнопку ion-item, откройте нужную страницу, но если я нажму кнопку "Назад", она закроет приложение, а не вернется на предыдущую страницу в android:

Это мое ионное боковое меню:

<ion-side-menus enable-menu-with-back-views="false">
  <ion-side-menu-content>
    <ion-nav-bar class="bar-positive">
      <ion-nav-back-button></ion-nav-back-button>
      <ion-nav-buttons side="left">
        <button class="button button-icon icon ion-android-menu" menu-toggle="left">
        </button>
      </ion-nav-buttons>
    </ion-nav-bar>
    <ion-nav-view name="menuContent"></ion-nav-view>
  </ion-side-menu-content>

  <ion-side-menu side="left">
    <ion-header-bar class="bar-positive">
      <h1 class="title"></h1>
    </ion-header-bar>
    <ion-content>
      <ion-list>
        <ion-item menu-close ng-click="login()">
          Login
        </ion-item>
        <ion-item menu-close ui-sref="app.search">
          Search
        </ion-item>
        <ion-item menu-close href="#/app/browse">
          Browse
        </ion-item>
        <ion-item menu-close href="#/app/playlists">
          Playlists
        </ion-item>
      </ion-list>
    </ion-content>
  </ion-side-menu>
</ion-side-menus>

Вот app.js:

    .state('app', {
    url: '/app',
    abstract: true,
    templateUrl: 'templates/menu.html',
    controller: 'AppCtrl'
  })

  .state('app.search', {
    url: '/search',
    views: {
      'menuContent': {
        templateUrl: 'templates/search/default.html'
      }
    }
  })
  .state('app.search-form', {
    url: '/search-form',
    views: {
      'menuContent': {
        templateUrl: 'templates/search/search-form.html'
      }
    }
  })

Одно из найденных решений:

$ionicHistory.nextViewOptions({        
  disableBack: true,
  historyRoot: true
});      

Итак, когда вы нажмете кнопку и перейдете на следующую страницу, это отключит кнопку возврата.

Ответ 1

Поведение по умолчанию кнопки "Назад" выглядит следующим образом: Вернитесь в историю - если стек истории пуст → выйдите из приложения.

Итак, вы должны проверить состояние $, в котором находитесь, когда вы нажимаете кнопку возврата оборудования.

С помощью следующего кода (помещенного в функцию запуска вашего модуля) вы можете перезаписать поведение по умолчанию. Например, вы можете отключить выход приложения следующим образом:

$ionicPlatform.registerBackButtonAction(function (event) {
  if($state.current.name=="app.home"){
    navigator.app.exitApp(); //<-- remove this line to disable the exit
  }
  else {
    navigator.app.backHistory();
  }
}, 100);

Смотрите документацию для $ionicPlatform.

Ответ 2

В боковом меню атрибут menu-close очищает историю. Вы можете поэкспериментировать, заменив его на menu-toggle="left". Это все равно закроет боковую панель, но сохранит историю.

Я закончил переопределять поведение для HW back key, как показано ниже. Он отправляет пользователя в начальный вид перед выходом из приложения при нажатии. Обратите внимание, что я по-прежнему использую атрибут menu-close в боковом меню. Также обратите внимание, что мне удалось сохранить начальный URL-адрес в window.localStorage["start_view"], потому что он может меняться в моем приложении. Надеюсь, что это может помочь/вдохновить кого-то другого на эту проблему.

$ionicPlatform.registerBackButtonAction(function(event) {
    if ($ionicHistory.backView() == null && $ionicHistory.currentView().url != window.localStorage["start_view"]) {
      // Goto start view
      console.log("-> Going to start view instead of exiting");
      $ionicHistory.currentView($ionicHistory.backView()); // to clean history.
      $rootScope.$apply(function() {
        $location.path(window.localStorage["start_view"]);
      });
    } else if ($ionicHistory.backView() == null && $ionicHistory.currentView().url == window.localStorage["start_view"]) {
      console.log("-> Exiting app");
      navigator.app.exitApp();
    } else {
      // Normal back
      console.log("-> Going back");
      $ionicHistory.goBack();
    }
  }, 100);

Ответ 3

Одним из решений может быть:

$ionicHistory.nextViewOptions({        
  disableBack: true,
  historyRoot: true
});      

Ответ 4

Это предотвращает распространение события, иначе это не сработало.

Код по: https://stackoverflow.com/users/5378702/andre-kreienbring

$ionicPlatform.registerBackButtonAction(function (event) {
  if(condition){
    navigator.app.exitApp(); //<-- remove this line to disable the exit
  }
  else {
    navigator.app.backHistory();
  }
  throw "PreventBackButton";
}, 100);