2016-04-19 3 views
5

Как проверить, активна ли страница ionic2?Ionic2 - проверьте, активна ли страница

Например, я хочу, чтобы скрыть кнопку, если страница активна:

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

Что вы пытаетесь выполнить точно? Обычно страница должна охватывать весь вид, поэтому любые кнопки на странице должны быть видимыми, а любые кнопки на другой странице не должны быть видны. –

+0

Я хочу передать имя страницы и проверить, есть ли я на этом – muetzerich

ответ

6

Из-за uglification вы не можете использовать pagename для производства.

проверить активную страницу, посмотрев, если последняя страница в стеке контроллера является экземпляр страницы:

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

Мне любопытно и смущено. Как проверить, «если последняя страница в стеке контроллера имеет экземпляр страницы», вы получаете текущую активную страницу? – Rexford

+0

Это должен быть принятый ответ. @Rexford Ионный стек - это массив, в котором вы «нажимаете» и «тянете» компонент, поэтому последний компонент в стеке всегда активен;) – PeterPan666

+0

Подтверждено это работает. Дек, 2017 – Lincoln

0

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

Прочитайте документ выше. Импорт NavController к вашей странице, то вы можете вводить NavController в вашу страницу с помощью машинописный:

constructor(public nav: NavController) {} 

или с помощью ES6:

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

После всего этого, вы можете позвонить this.nav.getActive(), чтобы увидеть текущую страницу или вызов this.nav.isActive('MyPage'), чтобы проверить, если вы находитесь на MyPage

Edit: версия ES6 не действительно ES6, но должен работать на Ionic2

+5

Я что-то здесь отсутствует. nav.isActive() (по документам, на которые вы ссылались в своем ответе) ожидает параметр типа ViewController, поэтому ваш пример 'this.nav.isActive ('MyPage')' не должен работать, поскольку вы отправляете ему строку стоимость. –

+0

Примечание: если вы используете сравнение строк, используйте this.nav.getActive(). Name. –

1

Вы можете получить активную страницу и проверить его имя:

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

UPDATE

В комментариях вы можете увидеть некоторые пользователи, которые утверждают, что это решение не работает для них в связи с процессом уродовать. Это звучит разумно, но я все еще нашел решение, похоже, работает. Я составил в APK с этим кодом, используя следующую команду:

ionic cordova build android --prod --release 

Во время компиляции вы можете увидеть:

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

Тогда, когда я запускаю это приложение в Android эмулятора я получил название правой страницы используя this.navCtrl.getActive().name.

Должен сказать, что я не тестировал его с помощью подписанного приложения на реальном устройстве.

Может быть, Android или эмулятор не затронут, может быть проблема, описанная этими пользователями, решена в последних выпусках, возможно, я делаю что-то неправильно. Поскольку я не знаю ответа на эти вопросы, я сохраняю свой ответ, но я добавил эту информацию. Пожалуйста, если вы знаете больше об этом комментарии, вместо того, чтобы просто игнорировать или откладывать ответ. Если этот ответ окажется ошибочным, я с радостью изменю его или удалю.

+2

Это нехорошее решение. Когда вы создаете производственную версию своего приложения, она убирает все имена и поэтому ваше «имя_папки» скорее всего не сработает. – Gauzy

+0

@Gauzy, вы уверены, что процесс uglify влияет на это имя? Я искал информацию, но не могу найти, где это объясняется. Я мог бы искать больше, но если у вас есть хорошая ссылка, я бы хотел посмотреть. – sanzante

+1

Я просто испытал то, что сказал @Gauzy сегодня, поэтому я могу подтвердить, что он не работает на производстве. Ответ Павла - правильный. – PeterPan666

0

Обновления до @sanzante ответов. Вы можете получить активную страницу и проверить ее имя следующим образом.

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

Он будет работать и для версии -prod build.

ionic cordova build android --prod --release

Смежные вопросы