2016-05-05 33 views
9

Sono nuovo di ionica 2 & Angular2 e ho scaricato un nuovo modello ionico con il seguente comandoDisabilitare colpo del menu laterale per aprire gesto per la pagina di Accesso (o qualsiasi pagina) in ionica 2

Ionic start appname sidemenu --v2 --ts 

Per questa particolare soluzione ho aggiunto una pagina di accesso per convalidare un utente. Una volta che la convalida ha esito positivo, l'utente verrà indirizzato alla pagina del menu che utilizza il menu laterale.

Poiché la soluzione è basata sul modello sidemenu, il menu laterale viene visualizzato sulla pagina di accesso ogni volta che l'utente scorre verso sinistra.

Quindi qualcuno può guidarmi per correggere questo errore e interrompere la visualizzazione del menu laterale quando la vista viene trascinata.

Il mio codice

App.ts il file

import {App, IonicApp, Platform,MenuController} from 'ionic-angular'; 
import {StatusBar} from 'ionic-native'; 
import {HelloIonicPage} from './pages/hello-ionic/hello-ionic'; 
import {ListPage} from './pages/list/list'; 
import {HomePage} from './pages/home/home'; 


@App({ 
    templateUrl: 'build/app.html', 
    config: {} // http://ionicframework.com/docs/v2/api/config/Config/ 
}) 
class MyApp { 
    // make HelloIonicPage the root (or first) page 
    rootPage: any = HomePage; 
    pages: Array<{title: string, component: any}>; 

    constructor(
    private app: IonicApp, 
    private platform: Platform, 
    private menu: MenuController 
) { 
    this.initializeApp(); 

    // set our app's pages 
    this.pages = [ 
     { title: 'Hello Ionic', component: HelloIonicPage }, 
     { title: 'My First List', component: ListPage } 
    ]; 
    } 

    initializeApp() { 
    this.platform.ready().then(() => { 
     // Okay, so the platform is ready and our plugins are available. 
     // Here you can do any higher level native things you might need. 
     StatusBar.styleDefault(); 
    }); 
    } 

    openPage(page) { 
    // close the menu when clicking a link from the menu 
    this.menu.close(); 
    // navigate to the new page if it is not the current page 
    let nav = this.app.getComponent('nav'); 
    nav.setRoot(page.component); 
    } 
} 

file di app.html

<ion-menu side-menu-content drag-content="false" [content]="content"> 

    <ion-toolbar> 
    <ion-title>Pages</ion-title> 
    </ion-toolbar> 

    <ion-content> 
    <ion-list> 
     <button ion-item *ngFor="#p of pages" (click)="openPage(p)"> 
     {{p.title}} 
     </button> 
    </ion-list> 
    </ion-content> 

</ion-menu> 

<ion-nav id="nav" [root]="rootPage" #content swipe-back-enabled="false"></ion-nav> 

Homepage.ts file (pagina di login in questo caso).

import {Page, Events,Alert,NavController,Loading,Toast,Storage,LocalStorage,SqlStorage} from 'ionic-angular'; 
import { FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, AbstractControl } from 'angular2/common'; 
import {HelloIonicPage} from '../hello-ionic/hello-ionic'; 
import {NgZone} from 'angular2/core'; 

@Page({ 
    templateUrl: 'build/pages/home/home.html' 
}) 
export class HomePage { 

public Uname :string; 
public usrvalid:boolean; 
public usrpwd :boolean; 
public usrpwdlength:boolean; 
public usrvalidlength:boolean; 
public isUnchanged:boolean; 
public usrpwdzero:boolean; 
public usrvaliddigits:boolean; 
rootpage:any; 

public Upwd:string; 
    constructor(public nav:NavController) { 
this.nav=nav; 
this.isUnchanged=true; 
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})"); 

// rootPage: any = HomePage; 

    } 
} 

risposta

15

penso che la direttiva drag-content viene utilizzato in ionica 1, per ionico 2 che cosa si può fare è disabilitare dal di dentro il file di classe pagina.

Si può fare questo importando il fornitore MenuController da ionic-angular e quindi chiamare il metodo .swipeEnable(shouldEnableBoolean, menuId) per disabilitare il gesto di scorrimento nella classe della tua pagina (questo è anche documentato here).

Il controller di accesso dovrebbe essere qualcosa di simile ...

import {Page, MenuController} from 'ionic-angular'; 

@Page({ 
    templateUrl: 'build/pages/home/home.html' 
}) 
export class HomePage { 
    constructor(public menu: MenuController) { 
     this.menu.swipeEnable(false); 
    } 
} 

Se si dispone di più i menu e ognuno ha un id, allora è possibile destinare un menu specifico come questo ...

this.menu.swipeEnable(false, `menuId`); 
+2

Per chi ha problemi a far funzionare swipeEnable (false), è probabile che il menu non sia stato ancora inizializzato. Se provi a farlo nel modello Hello Ionic, non funzionerà nel costruttore ma all'interno del blocco 'platform.ready(). Then' – Todd

+0

Sto avendo la stessa situazione del questionario, ho fatto il mio codice come la tua risposta . Ma, dopo il login, navigo alla pagina A, ma non ha l'icona della barra dei menu. Poi, faccio scorrere per aprire l'elenco dei menu, faccio nuovamente clic su quella pagina, quindi improvvisamente l'icona della barra dei menu. Ho messo questo 'this.menu.swipeEnable (false);' nella pagina Un controller. Grazie in anticipo. –

+0

ionViewDidLoad() { this.menu.swipeEnable (false, 'left'); } – Christer

0

è possibile disabilitare/abilitare sidemenu in qualsiasi momento in qualsiasi pagina, chiamando

$ ionicSideMenuDelegate.canDragContent (false)

per esempio:.

angular.module ('ABC') di controllo ('xyzCtrl', function ($ portata, $ ionicSideMenuDelegate) {

$ionicSideMenuDelegate.canDragContent(false) 

});