2016-01-22 8 views
2

Я использую NavController. Чтобы вернуться назад, я могу использовать nav.pop(), но как использовать nav.popTo(), если мне нужно перейти на другую страницу (не последнюю)?Как использовать nav.popTo() (ионный 2)?

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

this.nav.push(MyNextPage); 

ответ

0

nav.popTo() предназначен для отступления нескольких уровней в иерархии страниц.

Например, если ваша страница иерархия login -> welcome -> article1 -> detail1 вы можете использовать что-то вроде:

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

this.nav.popTo(MyWelcomePage); 

Чтобы вернуться к странице приветствия. См. Документы для дальнейших навигационных методов и деталей: http://ionicframework.com/docs/v2/api/components/nav/NavController/#popTo

+0

Привет вы можете показать, как retrive, что 'вид MyWelcomePage'? Я понятия не имею, как получить представление, к которому я хочу перейти. –

+0

Ваш MyWelcomePage должен быть типом ViewController, который был передан в вашу detail1-страницу через NavParams на всем пути с приветственной страницы –

+1

. Ваша ссылка на документы, похоже, больше не актуальна:/ – Luckylooke

0

Почему бы не просто использовать Ionic's nav.setRoot(@component)?

Принимая приведенный выше пример, вы можете легко сделать

nav.push(welcome) -> nav.push(article1) -> nav.push(detail1)

и вернуться на главную страницу сайта, просто nav.setRoot(welcomePage)

Edit: Я думаю, что это сбрасывает стек.

3

вы тучными получить индекс this.navCtrl.getByIndex(int i) и установить его внутри popTo() см код ниже:

this.navCtrl.popTo(this.navCtrl.getByIndex(1)); 

с этим, например, вы можете поп две страницы

+0

Thankyou .. this.navCtrl.getByIndex (int i) работает в Ionic 3. Ранее в Ionic 2 я использовал this.navCtrl.popTo (0), и он прекратил работу, когда я обновился до Ionic 3. –

4

Вот код, чтобы подняться на два уровня s, то есть на родительскую страницу предыдущей страницы.

this.navCtrl.popTo(this.navCtrl.getByIndex(this.navCtrl.length()-3)); 

Поп на корневую страницу.

this.navCtrl.popToRoot(); 
+1

Я не могу найти popTo в документах: https://ionicframework.com/ docs/api/navigation/NavController/ – Luckylooke

+0

На их документах потемнело. LMAO! :( –

0

Если вы отложенной загрузки вам нужно что-то вроде этого:

let targetView = this._navCtrl.getViews().filter(view=> view.id == 'MyAwesomePage') 
targetView.length ? this._navCtrl.popTo(targetView[0]) : this._navCtrl.pop() 

Заметьте, что вы можете справиться отходящий дело с чем-то другим, чем просто поп()

Если вы хотите более контроль на каком экземпляре зрения вы хотите идти, вы можете попробовать что-то вроде этого:

let index: number; 
let views: any[] = this._navCtrl.getViews() 
let found: boolean = views.some((view, i) =>{ 
    index = i 
    return (view.id == 'MyAwesomePage') 
}) 
found ? this.navCtrl.popTo(views[index]) : this._navCtrl.pop() 

вы можете getViews().reverse(). filter() или views.reverse(). some(), чтобы получить последние вхождения.

Это использует Ионные 3 и Array.some() из ES5

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