2017-02-21 79 views
2
秒最後一頁

我有以下的導航情況:離子2角NavController,彈回至

Home -> navCtrl.push(SearchPage) -> navCtrl.push(ResultPage) 

Home -> navCtrl.push(SearchPage) -> navCtrl.push(ResultPage) -> navCtrl.push(DetailPage) 

我要導航回SearchPage。在第一種情況下,是沒有問題的,我可以用

this.navCtrl.pop() 

但是,在第二種情況下,我嘗試使用

this.navCtrl.popTo(SearchPage) 

,並預期這不起作用。離子只能導回一個頁面。我知道popTo()有個問題()(https://github.com/driftyco/ionic/issues/6513

我該如何解決這個問題?

回答

1

OK,找到了解決辦法。它看起來像它的工作...至少目前爲止

this.navCtrl 
     .push(SearchPage) 
     .then(() => { 

      const index = this.viewCtrl.index; 

      for(let i = index; i > 0; i--){ 
       this.navCtrl.remove(i); 
      } 

     }); 
0

您可以通過使用insertPage方法修改導航控制器堆棧來做到這一點。

this.nav.insertPages(0, [{page: your_home_page}, {page: SearchPage}]); 
this.nav.pop(); 

這裏0是指你想要插入頁面的位置。在上面的代碼中,0將成爲您的主頁,1將成爲您的搜索頁面。在DetailPage中使用這個命令來導航到SearchPage。

有關更多信息,請http://ionicframework.com/docs/v2/api/navigation/NavController/

+0

謝謝,但沒有效果。它只導航一頁。 'getSearchPage(){ this.navCtrl.insertPages(0,[{page:HomePage},{page:SearchPage}]); this.navCtrl.pop(); }' – hydrococcus

+0

嘗試添加this.navCtrl.remove(0);在添加其他代碼行之前。這有助於在第0個位置從堆棧中刪除頁面 – AishApp

+0

再次沒有效果。我很茫然。 – hydrococcus

3

試試這個吧!一旦你在DetailPage,做到:

this.navCtrl.remove(2,1); // This will remove the 'ResultPage' from stack. 
this.navCtrl.pop(); // This will pop the 'DetailPage', and take you to 'SearchPage' 
1
this.nav.push(AnotherPage) 
.then(() => { 
    const index = this.viewCtrl.index; 
    this.nav.remove(index); 
}); 
1
this.navController.push(SearchPage).then(() => { 
    const index = this.viewCtrl.index; 
    this.navController.remove(index, 1); //this will remove page3 and page2 
}); 

包含在組件的代碼。

0

我也遇到了同樣的問題,並找到了解決方案,它是類似於接受的答案,但沒有循環和一點點細節,所以我希望這可以幫助別人理解它。

因此,這裏的流量:

Home -> navCtrl.push(SearchPage) -> navCtrl.push(ResultPage) -> navCtrl.push(DetailPage) 

這裏是各自的指數:

Home: 0 
SearchPage: 1 
ResultPage: 2 
DetailPage: 3 

如果你想從DetailPage回去SearchPage,你基本上要從刪除ResultPage當您推送DetailPage時堆疊。

​​

希望這有助於有人的地方:當你把DetailPage

所以試穿ResultPage此代碼。

0

我在這裏回答了類似的問題,它似乎也適用於你的。由於我懶加載模塊,只有當我從NavController.getViews()數組傳遞一個對象時,popTo()才起作用。 雖這麼說,你可以嘗試這樣的事:

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()反() .filter()或views.reverse()。some()。這是與Ionic 3和ES5的Array.some()