我正在使用NavController。要回去,我可以使用nav.pop(),但如果我需要转到另一页(不是最后一页),如何使用nav.popTo()?
constructor(nav: NavController) {
this.nav = nav;
this.nav.push(MyNextPage);
答案 0 :(得分:10)
这是两个级别的代码,即上一页的父页面。
this.navCtrl.popTo(this.navCtrl.getByIndex(this.navCtrl.length()-3));
弹出到根页面。
this.navCtrl.popToRoot();
答案 1 :(得分:4)
你获取索引this.navCtrl.getByIndex(int i)
并将其设置在popTo()
内,请参阅下面的代码:
this.navCtrl.popTo( this.navCtrl.getByIndex(1));
使用此示例,您可以弹出两个页面
答案 2 :(得分:2)
如果你懒得加载,你需要这样的东西:
let targetView = this._navCtrl.getViews().filter(view=> view.id == 'MyAwesomePage')
targetView.length ? this._navCtrl.popTo(targetView[0]) : this._navCtrl.pop()
请注意,您可以使用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()来获取最后一次出现。
这是使用来自ES5的Ionic 3和Array.some()
答案 3 :(得分: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
答案 4 :(得分:0)
为什么不使用Ionic的nav.setRoot(@component)
?
采用上面的例子,你可以很容易地做到
nav.push(welcome) -> nav.push(article1) -> nav.push(detail1)
然后返回欢迎页面,只需nav.setRoot(welcomePage)
编辑:我认为这会重置堆栈。
答案 5 :(得分:0)
离子2 popTo()存在问题。预计Ionic团队将解决这个问题。
请参阅以下链接: https://forum.ionicframework.com/t/viewcontroller-and-popto-ionic-2/53704
答案 6 :(得分:0)
现在已经晚了,但对于想要它的人,请参阅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'或PageName或index)以及选项。