2016-04-19 21 views
5

Jak mogę sprawdzić, czy strona ionic2 jest aktywna?Ionic2 - sprawdź, czy strona jest aktywna

Na przykład chcę ukryć przycisk, jeśli strona jest aktywny:

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

co starasz się osiągnąć dokładnie? Zazwyczaj strona powinna zajmować cały widok, więc wszelkie przyciski na stronie powinny być widoczne, a przyciski na innej stronie nie powinny być widoczne. –

+0

Chcę podać nazwę strony i sprawdzić, czy jestem na tym – muetzerich

Odpowiedz

6

Z powodu uciążliwości nie można używać nazwy strony do produkcji.

sprawdzić aktywną stronę patrząc jeżeli ostatnia strona na stosie kontroler jest na przykład strony:

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

Jestem ciekawy i zdezorientowany. W jaki sposób sprawdzenie "czy ostatnia strona na stosie kontrolera jest stroną" daje aktualną aktywną stronę? – Rexford

+0

To powinna być zaakceptowana odpowiedź. @Rexford The Ionic stack to tablica, w której "push" i "pull" komponent, więc ostatni komponent w stosie jest zawsze aktywny;) – PeterPan666

+0

Potwierdzone to działa. Grudnia 2017 r – Lincoln

0

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

Czytaj doc powyżej. Importować NavController na swojej stronie, a następnie można wstrzykiwać NavController do swojej strony za pomocą maszynopis:

constructor(public nav: NavController) {} 

lub używając ES6:

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

Po tym wszystkim, że można zadzwonić this.nav.getActive() zobaczyć bieżącej strony lub zadzwoń this.nav.isActive('MyPage') aby sprawdzić, czy jesteś na MojaStrona

Edit: wersja ES6 nie jest naprawdę ES6 ale powinien działać na Ionic2

+5

Jestem czegoś tu nie ma. nav.isActive() (na dokumenty, z którymi łączyłeś się w swojej odpowiedzi) spodziewa się paramu typu ViewController, więc twój przykład 'this.nav.isActive ('MyPage')' nie powinien działać, ponieważ wysyłasz ciąg znaków wartość. –

+0

Uwaga: jeśli wykonujesz porównanie łańcuchów, użyj this.nav.getActive(). Name. –

1

można pobrać aktywną stronę i sprawdź swoją nazwę:

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

UPDATE

w komentarzach widać niektórym użytkownikom, które twierdzą, rozwiązanie to nie działa dla nich ze względu na proces zeszpecić. Brzmi rozsądnie, ale nadal uważam, że rozwiązanie działa. Mam skompilowany plik APK z tego kodu za pomocą tego polecenia:

ionic cordova build android --prod --release 

Podczas kompilacji można zobaczyć:

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

Wtedy, kiedy uruchomić tę aplikację w Android emulatora mam właściwą nazwę strony przy użyciu this.navCtrl.getActive().name.

Muszę powiedzieć, że nie przetestowałem go z podpisaną aplikacją w prawdziwym urządzeniu.

Może to być Android lub emulator nie jest naruszony, może być problem opisany przez tych użytkowników rozwiązany w ostatnich wydaniach, może być robię coś nie tak. Ponieważ nie znam odpowiedzi na to pytanie, podtrzymuję odpowiedź, ale dodałem tę informację. Jeśli wiesz więcej na temat tego komentarza, zamiast ignorować lub nie przekazywać tej odpowiedzi. Jeśli ta odpowiedź okaże się nieprawidłowa, z przyjemnością ją zmienię lub usuniemy.

+2

To nie jest dobre rozwiązanie. Kiedy tworzysz wersję produkcyjną swojej aplikacji, podbija ona wszystkie nazwy, więc twoja "nazwa strony" najprawdopodobniej nie zadziała. – Gauzy

+0

@Gauzy, jesteś pewien, że proces ugffy wpływa na to imię? Szukałem informacji, ale nie mogę znaleźć miejsca, w których zostało to wyjaśnione. Mogę przeszukiwać więcej, ale jeśli masz dobry link na ten temat, chciałbym rzucić okiem. – sanzante

+1

Właśnie przeżyłem, co powiedział dziś @Gauzy, więc mogę potwierdzić, że nie działa w produkcji. Odpowiedź Pawła jest właściwa. – PeterPan666

0

Aktualizacja odpowiedzi @sanzante. Możesz pobrać aktywną stronę i sprawdzić jej nazwę w następujący sposób.

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

Będzie również działać w wersji --prod build.

jonowa cordova budować Androida --prod --release

Powiązane problemy