Wyłączyć przycisk hardware back w aplikacji Ionic?
Próbuję Wyłączyć przycisk Wstecz w mojej aplikacji Cordova. Używam AngularJS + Ionic Framework. Znalazłem tematy na ten temat i wypróbowałem poniższy kod, ale nie ma absolutnie żadnego efektu. Jakiś pomysł? Dzięki!
Indeks.html
<head>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
document.addEventListener("backbutton", function (e) {
e.preventDefault();
console.log("hello");
}, false );
}
</script>
</head>
Zauważ, że po naciśnięciu przycisku Wstecz w konsoli wyświetlane jest "hello".
8 answers
Wreszcie znalazłem odpowiedź na ten Ionic wątek na Forum:
$ionicPlatform.registerBackButtonAction(function () {
if (condition) {
navigator.app.exitApp();
} else {
handle back action!
}
}, 100);
$ionicPlatform.registerBackButtonAction
pozwala całkowicie nadpisać zachowanie przycisku Wstecz.
Pierwszy param jest funkcja callback, a drugi priorytet (tylko wywołanie zwrotne z najwyższym priorytetem zostanie wykonane).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 15:08:47
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
}, 100);
Spowoduje to zablokowanie funkcji przycisku Wstecz.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 15:08:59
Aby rozszerzyć odpowiedź Davida D, włączyłem implementację go back.
Umieść to w swoich aplikacjach .run
Funkcja:
$ionicPlatform.registerBackButtonAction(function (event) {
if ($ionicHistory.currentStateName() === 'someStateName'){
event.preventDefault();
} else {
$ionicHistory.goBack();
}
}, 100);
To nie będzie działać w kontrolerach, jest to cała aplikacja.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 15:39:53
Its simple trick prevent go back to single page:
`.controller('DashCtrl', function($scope,$ionicHistory) {
$ionicHistory.clearCache();
$ionicHistory.clearHistory();
})`
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 14:16:53
Przykład w docs pokazuje detektory zdarzeń - nawet deviceready
- dołączone po wywołaniu zdarzenia document onload
.
Użycie kodu:
function onDeviceReady() {
document.addEventListener("backbutton", function (e) {
e.preventDefault();
console.log("hello");
}, false);
}
document.onload = function () {
document.addEventListener("deviceready", onDeviceReady, false);
};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-24 13:26:09
Aby uniemożliwić korzystanie z funkcji przycisku Wstecz urządzenia,
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
}, 100);
Jeśli chcesz zapobiec użyciu konkretnej strony,
$ionicPlatform.registerBackButtonAction(function (event) {
event.preventDefault();
if ($location.path() === "/pagename" || $location.path() === "pagename") {
navigator.app.exitApp();
} else {
$ionicHistory.goBack();
}
}, 100);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 09:24:48
Aby wyłączyć hardware back button W aplikacji Ionic dla kontrolera (lub kontrolera komponentu), możesz wykonać następujące obejście, ale najpierw nie jest to w rzeczywistości dla samego kontrolera, ale kombinacja kontrolerów i stanu, w kontrolerze dodaj swój normalny kod:
var deRegisterHardBack = $ionicPlatform.registerBackButtonAction(
function (event) {
if (youConditionHere) {
event.preventDefault();
// do something
} else {
$ionicHistory.goBack();
}
}, 100);
Ale w Twoim $stateProvider
dodaj disableHardwareBackButton
Jak poniżej:
$stateProvider
.state('app.stateB', {
url: '/page-b/:id',
template: '<ion-view><ion-nav-title>Sub Page </ion-nav-title>Hello</ion-view>',
disableHardwareBackButton : true
});
Wewnątrz modułu ('app').funkcja run:
$ionicPlatform.registerBackButtonAction(function(event){
if ($state.current.disableHardwareBackButton){
event.preventDefault();
} else {
$ionicHistory.goBack();
}
}
W ten sposób można obejść problem z "sub section" lub " inside controller "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-27 09:54:31
Dla Jonowych 3:
// root component
export class MyApp {
constructor(platform: Platform) {
platform.ready().then(() => {
platform.registerBackButtonAction(() => {
this.customBackButtonHandler();
}, 100)
});
}
customBackButtonHandler() {
...
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-16 18:30:36