Ионная структура $state.go('app.home'); добавляет обратно кнопку на странице, куда я хочу пойти (как ее удалить)?

У меня есть приложение с меню боковой панели. Я на второй странице, и я вызываю функцию контроллера, которая перенаправляет меня на первую страницу, используя:

$state.go('app.home');

Проблема в том, что на этой странице теперь отображается обратная кнопка следующей иконки меню боковой панели, см. изображение ниже:

enter image description here

Может ли кто-нибудь сказать мне, как отказаться от добавления кнопки возврата на страницы, которым присвоено меню боковой панели?

Спасибо за любую помощь.

app.js с конфигурацией маршрутизатора:

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:

Добавлен шаблон меню:

<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>

Ответ 1

Используйте $ionicHistory в своем контроллере перед вызовом $state.go('app.home').

.controller('HomeCtrl', function($scope,...,$ionicHistory) {
  ...
  $ionicHistory.nextViewOptions({
    disableBack: true
  });

  $state.go('app.home');
});

Ответ 2

Вы можете установить nextViewOptions перед $state.go('Yourstate'). подобно В вашем контроллере вы можете написать

$ionicHistory.nextViewOptions({
  disableBack: true
});
$state.go('app.home');

Итак, для этого перехода он очистит стек истории и установит следующее представление как root из стека истории.

Ответ 3

На контроллере, который вы хотите вернуть HomeCtrl:

.controller('SavedCtrl', function($scope,...,$ionicHistory) {
  ...
    $ionicHistory.nextViewOptions({
       disableBack: true
    });

  $state.go('app.home');
 })
.controller('HomeCtrl', function($scope,...,$ionicHistory) {
     $ionicHistory.clearHistory();
 })

Ответ 4

$ionicNavBarDelegate.showBackButton(false);

Ответ 5

Пока у вас есть <ion-nav-back-button></ion-nav-back-button>, включенный в <ion-nav-bar>, вы увидите кнопку возврата по умолчанию для любого вида с помощью app.

Удаление <ion-nav-back-button> приведет к удалению кнопки "Назад" из всех видов, используя app. Вы можете выборочно отключить его на основе того, какой шаблон вы просматриваете, установив hide-back-button="true" в <ion-view> этого шаблона.

Итак, в вашем случае удаление <ion-nav-back-button class="button-clear"><i class="icon ion-ios7-arrow-back"></i> Back</ion-nav-back-button> из menu.html скроет кнопку возврата во всех представлениях с помощью app.

Ответ 6

У меня тоже была эта проблема при использовании меню со звуковым сопровождением.

В некоторых случаях при выборе опции из бокового меню результирующая страница/представление показывала кнопку возврата в навигационной панели, которой она не должна (потому что выбор опции меню должен reset истории).

Проблема связана с использованием "ng-click" в опции меню, например:

<ion-item menu-close ng-click="showStartPage()" ...>

с 'showStartPage' является методом контроллера, который вызывает $state.go(...).

Решение заключалось в следующем:

<ion-item menu-close href="#/startPage" ...>

Когда все сделано так, Ionic (по-видимому) умеет правильно отслеживать историю навигации.

(я не пробовал, но, вероятно, "ui-sref" вместо "href" тоже работал)