Side menu

25 gennaio 2016

Un altro pattern molto affermato nel mondo mobile è quello dei side menu, cioè menu laterali che si aprono cliccando su un’icona o trascinando la view corrente. Ionic fornisce un gruppo di direttive che rende molto semplice l’aggiunta di un menu di questo tipo alle nostre applicazioni.

La prima direttiva, quella che racchiude tutto il contenuto della view, è ion-side-menus. All’interno di questa direttiva ne utilizzeremo altre due:

DirettivaDescrizione
on-side-menurappresenta il menu vero e proprio
ion-side-menu-contentrappresenta la view principale, cioè la view che mostra i contenuti

La struttura del nostro markup avrà dunque la seguente forma:

<ion-side-menus>
	<ion-side-menu-content>
	</ion-side-menu-content>

	<ion-side-menu side="left">
	</ion-side-menu>
</ion-side-menus>

Come possiamo vedere, nella direttiva ion-side-menu abbiamo specificato il valore left per l’attributo side. Con questa indicazione chiediamo che il menu venga visualizzato sul lato sinistro dello schermo. Come è naturale, l’altro possibile valore è right. È possibile creare una view con due menu laterali, uno a sinistra e uno a destra, specificando due ion-side-menu con i rispettivi attributi side.

Con questa semplice struttura la view è pronta per ospitare i contenuti ed il menu laterale verrà visualizzato al trascinamento verso destra dell’area dei contenuti. Purtroppo con questa struttura l’utente non è in grado di sapere se esiste un menu laterale o meno. In genere la presenza di un menu laterale viene suggerito tramite un apposito pulsante agli angoli superiori della view.

Il seguente è un esempio di applicazione di questo approccio:

<ion-side-menus>
	<ion-side-menu-content>
		<ion-header-bar class="bar-dark">
			<button class="button button-icon button-clear ion-navicon" ng-click="attivaMenu()"></button>
			<h1 class="title">Side Menu</h1>
		</ion-header-bar>
		<ion-content>
			Contenuti principali
		</ion-content>
	</ion-side-menu-content>
	
	<ion-side-menu side="left">
		<!-- ... -->
	</ion-side-menu>
</ion-side-menus>

Come possiamo vedere, nell’area dei contenuti abbiamo inserito una intestazione con sfondo scuro con un pulsante sulla sinistra. Al clic sul pulsante abbiamo associato la chiamata alla funzione attivaMenu() definito nel controller:

myApp.controller('myController', function($scope, $ionicSideMenuDelegate) {

	$scope.attivaMenu = function() {
		$ionicSideMenuDelegate.toggleLeft();
	};
});

La funzione invoca il metodo toggleLeft() del servizio $ionicSideMenuDelegate che attiva il menu di sinistra.

Nell’area dedicata al menu possiamo inserire le voci che l’utente può selezionare, ad esempio sotto forma di lista:

<ion-side-menu side="left">
	<ion-header-bar class="bar-dark">
		<h1 class="title">Left Menu</h1>
	</ion-header-bar>
	
	<ion-list>
		<ion-item menu-close href="#/view1">Voce 1</ion-item>
		<ion-item menu-close href="#/view2">Voce 2</ion-item>
		<ion-item menu-close href="#/view1">Voce 3</ion-item>
	</ion-list>
</ion-side-menu>

Ciascun elemento della lista contiene l’attributo href che punta alla view associata e la direttiva menu-close che fa in modo che il menu si chiuda quando la voce viene selezionata. In assenza della direttiva menu-close il menu non si chiuderà.

Il risultato visivo è illustrato dalla seguente figura:

Ionic prevede la possibilità di modificare il comportamento standard del menu laterale. Aggiungendo infatti l’attributo expose-aside-when è possibile fare in modo che il menu rimanga sempre visibile sui dispositivi che hanno uno schermo sufficientemente grande. Ad esempio, il seguente markup rende il menu sempre visibile sui dispositivi delle dimensioni tipiche di un tablet:

<ion-side-menu side="left" expose-aside-when="large">
	<!-- ... -->
</ion-side-menu>

Il menu continua ad essere visualizzato dinamicamente sui dispositivi di dimensioni inferiori.

Tutte le lezioni

1 ... 16 17 18 ... 29

Se vuoi aggiornamenti su Side menu inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Side menu

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing