2014-11-11 8 views
5

Nel framework ionico sto cercando di nascondere il pulsante del menu in modo condizionale. Per altri motivi ho dovuto dividere il menu nel suo controller (non voglio re-rendering completamente il menu e la barra di intestazione su un aggiornamento), quindi l'intestazione non è in vista ion. Ho creato un osservatore sulla variabile condizionale (unparecamp) nel controller dell'intestazione. Il log della console restituisce correttamente la variabile condizionale, ma la vista non viene aggiornata (il pulsante del menu viene sempre visualizzato).Nascondi in modo condizionale il pulsante di menu in quadro ionico esterno <ion-view>

Questo è il modello:

<ion-side-menus> 
    <ion-side-menu-content> 
     <ion-nav-bar class="bar-stable nav-title-slide-ios7"> 
      <ion-nav-back-button ng-if="!isHome" class="button-clear"><i class="icon ion-ios7-arrow-back"></i>Back</ion-nav-back-button> 
      <button ng-if="isHome" menu-toggle="left" class="button button-icon icon ion-navicon"></button> 
      <h1 class="title">Title</h1> 

     </ion-nav-bar> 
    <ion-nav-view name="menuContent" animation="slide-left-right"></ion-nav-view> 
</ion-side-menu-content> 

... 
</ion-side-menus> 

E nel controller:

$scope.$watch(function(){ 
    return $stateParams.contentUrl; 
}, 
    function(newVal){ 
     console.log(newVal); 
     if(!newVal || newVal === 'someParam'){ 
      $timeout(function(){ 
       $scope.$apply(function(){ 
        $scope.isHome = true; 
       }); 
       console.log("home"); 
      }); 
     } else { 
      $timeout(function(){ 
       $scope.$apply(function(){ 
        $scope.isHome = false; 
       }); 
       console.log("not home"); 
      }); 
     } 
    }); 

C'è un modo più semplice? O mi sto perdendo qualcosa qui?

risposta

1

Un po soluzione sporca sarebbe quello di dare quei pulsanti un id e quindi utilizzare jqlite nasconderli come questo nel controller:

angular.element(document.querySelector('#back-button')).addClass('hidden'); 
7

È possibile utilizzare l'attributo hide-back-button sull'elemento <ion-view> di dichiarare se questo la vista dovrebbe nascondere il pulsante Indietro per impostazione predefinita.

http://ionicframework.com/docs/nightly/api/directive/ionView/

<ion-view hide-back-button="true"> 
    <!-- view contents --> 
</ion-view> 
+0

Grazie, ma purtroppo non posso usare l'ione-view, perché questo fa sì che l'intestazione di ottenere rerendered su state.go :( – mhanisch

+0

Si può effettivamente, ionico-view e ioni-nav-bar sono a conoscenza gli uni degli altri Metti l'attributo hide-back-button in qualsiasi vista in cui vuoi nascondere il pulsante Indietro, e la vista ionica informerà la barra ion-nav per nascondere il pulsante Forse il tuo esempio non è abbastanza chiaro –

+0

back button è diverso dal pulsante del menu laterale, il pulsante nascondi non funziona sul pulsante del menu laterale – raykin

1

Impostazione hide-back-button su false non ha funzionato per me. Tuttavia, nel mio caso la soluzione più semplice era quella di avere

<ion-nav-buttons side="left"></ion-nav-buttons> 

all'interno <ion-view>. Questo è solo per includere un pulsante di navigazione sinistro laterale vuoto. Questo ha fatto il trucco per me.

0

Esso può essere fatto in un modo semplice:

<ion-side-menus enable-menu-with-back-views = "true"> 

e sulle pagine specifiche in cui si desidera nascondere la barra dei menu e la navigazione, per non dire la vostra pagina di login (all'interno del vostro controller di accesso), basta digitare - non dimenticare di includere oggetti specifici all'interno della funzione del controller.

$scope.$on('$ionicView.beforeEnter', function (event) { 
$scope.$root.showMenuIcon = false; 
$ionicSideMenuDelegate.canDragContent(false); 
}); 

$scope.$on('$ionicView.beforeLeave', function (event) { 
    $scope.$root.showMenuIcon = true; 
    $ionicSideMenuDelegate.canDragContent(true); 
}); 
Problemi correlati