Нажатие кнопки "Назад" закрывает приложение вместо возврата на предыдущую страницу
Если нажать любую кнопку 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);