2016-04-19 21 views
5

Come posso verificare se una pagina ionic2 è attiva?Ionic2 - verificare se la pagina è attiva

Per esempio voglio nascondere un pulsante se una pagina è attiva:

<button primary [hidden]="isActive('actualPageName')"> 
    Should be hidden 
</button> 
+0

cosa stai cercando di realizzare esattamente? La pagina dovrebbe in genere occupare l'intera vista in modo che tutti i pulsanti della pagina siano visibili e qualsiasi pulsante su un'altra pagina non dovrebbe essere visibile –

+0

Voglio passare il nome di una pagina e controllare se sono su questo – muetzerich

risposta

6

A causa dell'ugrificazione non è possibile utilizzare pagename per la produzione.

ho controllare la pagina attiva, cercando se l'ultima pagina sulla pila controller è dell'istanza della pagina:

import { NavController } from 'ionic-angular'; 
import { myPage } from '../../pages/my/my'; 
... 
constructor(public navCtrl: NavController) {} 
... 
let active = this.navCtrl.last().instance instanceof MyPage; 
+0

Sono curioso e confuso. In che modo controllare "se l'ultima pagina sullo stack del controller è l'istanza della pagina" ti dà la pagina attiva corrente? – Rexford

+0

Questa dovrebbe essere la risposta accettata. @Rexford Lo stack Ionic è un array in cui si "spinge" e si "tira" il componente, quindi l'ultimo componente nello stack è sempre attivo;) – PeterPan666

+0

Confermato ciò funziona. Dic, 2017 – Lincoln

0

http://ionicframework.com/docs/v2/api/navigation/NavController/#isActive

Leggi il documento di cui sopra. Importa NavController alla vostra pagina, allora si può iniettare NavController nella tua pagina utilizzando dattiloscritto:

constructor(public nav: NavController) {} 

o utilizzando ES6:

constructor(nav: NavController) { 
    this.nav = nav; 
} 

Dopo tutto questo, è possibile chiamare this.nav.getActive() per vedere la pagina o chiamata in corso this.nav.isActive('MyPage') per verificare se si è in MyPage

Edit: la versione ES6 non è veramente ES6 ma dovrebbe funzionare per Ionic2

+5

I'm manca qualcosa qui. nav.isActive() (per i documenti a cui ti sei collegato nella tua risposta) si aspetta un parametro di tipo ViewController, quindi il tuo esempio 'this.nav.isActive ('MyPage')' non dovrebbe funzionare dato che lo stai mandando una stringa valore. –

+0

Nota: se si esegue il confronto tra stringhe, utilizzare this.nav.getActive(). Name. –

1

È possibile recuperare la pagina attiva e verificare il suo nome:

public isActive(pageName: string): boolean { 
    return this.navCtrl.getActive().name === pageName); 
} 

UPDATE

Nei commenti si possono vedere alcuni utenti che sostengono questa soluzione non sta lavorando per loro a causa del processo Uglify. Sembra ragionevole, ma ho ancora trovato che la soluzione sembra funzionare. Ho compilato un APK con questo codice con questo comando:

ionic cordova build android --prod --release 

Durante la compilazione si può vedere:

... 
[13:00:41] uglifyjs started ... 
[13:00:43] sass finished in 2.45 s 
[13:00:43] cleancss started ... 
[13:00:46] cleancss finished in 3.05 s 
[13:00:57] uglifyjs finished in 16.27 s 
... 

Poi, quando si esegue tale applicazione nell'emulatore Android ho ottenuto il nome della pagina giusta utilizzando this.navCtrl.getActive().name.

Devo dire che non l'ho provato con un'applicazione firmata in un dispositivo reale.

Può essere Android o l'emulatore non è interessato, potrebbe essere il problema descritto da quegli utenti è stato risolto nelle versioni recenti, potrebbe essere sto facendo qualcosa di sbagliato. Poiché non conosco la risposta a queste domande, mantengo la mia risposta, ma ho aggiunto queste informazioni. Per favore, se ne sai di più su questo commento invece di ignorare o rifiutare questa risposta. Se questa risposta è dimostrata sbagliata, la modificherò o la cancellerò felicemente.

+2

Questa non è una buona soluzione. Quando crei una versione di produzione della tua app, tutti i nomi vengono ugulati e quindi il tuo 'pageName' probabilmente non funzionerà. – Gauzy

+0

@ Gauzy, sei sicuro che il processo di ugualizzazione abbia effetto su quel nome? Ho cercato informazioni ma non riesco a trovare dove è spiegato. Potrei cercare di più, ma se hai un buon link su questo mi piacerebbe dare un'occhiata. – sanzante

+1

Ho appena visto cosa ha detto oggi @Gauzy, quindi posso confermare che non funziona in produzione. La risposta di Paolo è quella giusta. – PeterPan666

0

Update per le risposte @sanzante. È possibile recuperare una pagina attiva e controllarne il nome come segue.

public isActive(pageName: string): boolean { 
    return this.navCtrl.getActive().id === pageName); 
} 

Funzionerà anche per la versione di build -prod.

ionico cordova build android --prod --release

Problemi correlati