J'ai une application avec un menu dans la barre latérale. Je suis sur la deuxième page et j'appelle la fonction de contrôleur qui me redirige vers la première page en utilisant:
$state.go('app.home');
Le problème est que sur cette page est maintenant affichée le bouton Précédent Icône de menu de la barre latérale suivante, voir l'image ci-dessous:
Quelqu'un pourrait-il me dire comment refuser l'ajout d'un bouton de retour dans les pages auxquelles un menu de la barre latérale a été attribué?
Merci pour toute aide.
app.js est avec le routeur config est la suivante:
angular.module('Test', ['ionic', 'config', 'Test', 'LocalStorageModule'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
// org.Apache.cordova.statusbar required
StatusBar.styleDefault();
}
});
})
.config(function($stateProvider, $urlRouterProvider, localStorageServiceProvider) {
localStorageServiceProvider
.setPrefix('max_relax');
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppCtrl'
})
.state('app.home', {
url: '/home',
views: {
'menuContent' :{
templateUrl: 'templates/home.html',
controller: 'HomeCtrl'
}
}
})
.state('app.saved', {
url: '/saved',
views: {
'menuContent' :{
templateUrl: 'templates/saved.html',
controller: 'SavedCtrl'
}
}
})
.state('app.settings', {
url: '/settings',
views: {
'menuContent' :{
templateUrl: 'templates/settings.html',
controller: 'SettingsCtrl'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/app/home');
});
Edit:
Ajout du modèle de menu:
<ion-side-menus>
<ion-pane ion-side-menu-content>
<ion-nav-bar class="bar-stable">
<ion-nav-back-button class="button-clear"><i class="icon ion-ios7-arrow-back"></i> Back</ion-nav-back-button>
</ion-nav-bar>
<ion-nav-view name="menuContent" animation="slide-left-right"></ion-nav-view>
</ion-pane>
<ion-side-menu side="left">
<header class="bar bar-header bar-stable">
<h1 class="title">Menu</h1>
</header>
<ion-content class="has-header">
<ion-list>
<ion-item nav-clear menu-close href="#/app/home">
Home
</ion-item>
<ion-item nav-clear menu-close href="#/app/saved">
Saved
</ion-item>
<ion-item nav-clear menu-close href="#/app/settings">
Settings
</ion-item>
</ion-list>
</ion-content>
</ion-side-menu>
</ion-side-menus>
Utilisez $ionicHistory
dans votre contrôleur avant d'appeler $state.go('app.home')
.
.controller('HomeCtrl', function($scope,...,$ionicHistory) {
...
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.home');
});
Vous pouvez définir nextViewOptions avant $ state.go ('Yourstate'). Comme dans votre contrôleur, vous pouvez écrire,
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.home');
Donc, pour cette transition, la pile d'historique sera effacée et la vue suivante sera définie comme racine de la pile d'historique.
Au contrôleur auquel vous voulez retourner HomeCtrl
:
.controller('SavedCtrl', function($scope,...,$ionicHistory) {
...
$ionicHistory.nextViewOptions({
disableBack: true
});
$state.go('app.home');
})
.controller('HomeCtrl', function($scope,...,$ionicHistory) {
$ionicHistory.clearHistory();
})
$ionicNavBarDelegate.showBackButton(false);
J'ai eu ce problème aussi en utilisant le menu latéral de Ionic.
Dans certains cas, lors de la sélection d'une option dans le menu latéral, la page/vue résultante affichait un bouton Précédent dans la barre de navigation, ce qui ne devrait pas (car la sélection d'une option de menu devrait réinitialiser l'historique).
Le problème était lié à l’utilisation de "ng-click" dans l’option de menu, par exemple:
<ion-item menu-close ng-click="showStartPage()" ...>
avec 'showStartPage' étant une méthode de contrôleur qui appelle $ state.go (...).
La solution était de le coder comme ceci:
<ion-item menu-close href="#/startPage" ...>
Lorsque cela est fait, Ionic est (apparemment) capable de garder une trace de l'historique de navigation.
(Je ne l'ai pas essayé mais probablement "ui-sref" au lieu de "href" fonctionnerait aussi)
Tant que vous avez <ion-nav-back-button></ion-nav-back-button>
inclus dans <ion-nav-bar>
vous verrez un bouton Précédent par défaut sur n’importe quelle vue utilisant app
.
Enlever <ion-nav-back-button>
supprime le bouton Précédent de toutes les vues avec app
. Vous pouvez le désactiver de manière sélective en fonction du modèle que vous visualisez en définissant hide-back-button="true"
sur le <ion-view>
de ce modèle.
Donc, dans votre cas, enlever <ion-nav-back-button class="button-clear"><i class="icon ion-ios7-arrow-back"></i> Back</ion-nav-back-button>
de menu.html
cachera le bouton Précédent sur toutes les vues en utilisant app
.