Как проверить, активна ли страница ionic2?Ionic2 - проверьте, активна ли страница
Например, я хочу, чтобы скрыть кнопку, если страница активна:
<button primary [hidden]="isActive('actualPageName')">
Should be hidden
</button>
Как проверить, активна ли страница ionic2?Ionic2 - проверьте, активна ли страница
Например, я хочу, чтобы скрыть кнопку, если страница активна:
<button primary [hidden]="isActive('actualPageName')">
Should be hidden
</button>
Из-за 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;
Мне любопытно и смущено. Как проверить, «если последняя страница в стеке контроллера имеет экземпляр страницы», вы получаете текущую активную страницу? – Rexford
Это должен быть принятый ответ. @Rexford Ионный стек - это массив, в котором вы «нажимаете» и «тянете» компонент, поэтому последний компонент в стеке всегда активен;) – PeterPan666
Подтверждено это работает. Дек, 2017 – Lincoln
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
Я что-то здесь отсутствует. nav.isActive() (по документам, на которые вы ссылались в своем ответе) ожидает параметр типа ViewController, поэтому ваш пример 'this.nav.isActive ('MyPage')' не должен работать, поскольку вы отправляете ему строку стоимость. –
Примечание: если вы используете сравнение строк, используйте this.nav.getActive(). Name. –
Вы можете получить активную страницу и проверить его имя:
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 или эмулятор не затронут, может быть проблема, описанная этими пользователями, решена в последних выпусках, возможно, я делаю что-то неправильно. Поскольку я не знаю ответа на эти вопросы, я сохраняю свой ответ, но я добавил эту информацию. Пожалуйста, если вы знаете больше об этом комментарии, вместо того, чтобы просто игнорировать или откладывать ответ. Если этот ответ окажется ошибочным, я с радостью изменю его или удалю.
Это нехорошее решение. Когда вы создаете производственную версию своего приложения, она убирает все имена и поэтому ваше «имя_папки» скорее всего не сработает. – Gauzy
@Gauzy, вы уверены, что процесс uglify влияет на это имя? Я искал информацию, но не могу найти, где это объясняется. Я мог бы искать больше, но если у вас есть хорошая ссылка, я бы хотел посмотреть. – sanzante
Я просто испытал то, что сказал @Gauzy сегодня, поэтому я могу подтвердить, что он не работает на производстве. Ответ Павла - правильный. – PeterPan666
Обновления до @sanzante ответов. Вы можете получить активную страницу и проверить ее имя следующим образом.
public isActive(pageName: string): boolean {
return this.navCtrl.getActive().id === pageName);
}
Он будет работать и для версии -prod build.
ionic cordova build android --prod --release
Что вы пытаетесь выполнить точно? Обычно страница должна охватывать весь вид, поэтому любые кнопки на странице должны быть видимыми, а любые кнопки на другой странице не должны быть видны. –
Я хочу передать имя страницы и проверить, есть ли я на этом – muetzerich