我正在使用导航控制器。要返回,我可以使用 nav.pop(),但是如果我需要转到另一个页面(不是最后一个页面),如何使用 nav.popTo()?
constructor(nav: NavController) {
this.nav = nav;
this.nav.push(MyNextPage);
我正在使用导航控制器。要返回,我可以使用 nav.pop(),但是如果我需要转到另一个页面(不是最后一个页面),如何使用 nav.popTo()?
constructor(nav: NavController) {
this.nav = nav;
this.nav.push(MyNextPage);
这是上两层的代码,即上一页的父页。
this.navCtrl.popTo(this.navCtrl.getByIndex(this.navCtrl.length()-3));
弹出到根页面。
this.navCtrl.popToRoot();
您可以获取索引this.navCtrl.getByIndex(int i)
并将其设置在内部popTo()
,请参见下面的代码:
this.navCtrl.popTo( this.navCtrl.getByIndex(1));
通过这个例子,你可以弹出两个页面
如果你延迟加载,你需要这样的东西:
let targetView = this._navCtrl.getViews().filter(view=> view.id == 'MyAwesomePage')
targetView.length ? this._navCtrl.popTo(targetView[0]) : this._navCtrl.pop()
请注意,您可以使用 pop() 以外的其他方法处理 off 情况
如果您想更多地控制要转到哪个视图实例,可以尝试以下操作:
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() 来获取最后一次出现。
这是使用 ES5 中的 Ionic 3 和 Array.some()
已经很晚了,但是对于想要它的人,请参阅https://github.com/ionic-team/ionic/blob/master/src/navigation/nav-controller.ts链接。
abstract popTo(page: Page | string | ViewController, opts?: NavOptions, done?: TransitionDoneFn): Promise<any>;
所以你可以使用 popTo('pagename' or PageName or index) 和选项。
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
为什么不只使用 Ionic 的nav.setRoot(@component)
?
以上面的例子,你可以很容易地做到
nav.push(welcome) -> nav.push(article1) -> nav.push(detail1)
并返回欢迎页面,只需简单nav.setRoot(welcomePage)
编辑:我认为这会重置堆栈。
ionic 2 popTo() 存在问题。Ionic Team 有望修复它。
请参阅下面的链接: https ://forum.ionicframework.com/t/viewcontroller-and-popto-ionic-2/53704