2017-03-04 33 views
7

我想知道如何在使用標籤時返回到appComponent中定義的rootPage。 setRoot方法沒有按我的預期工作。當它在Tab頁面中使用時,導航堆棧不會被清除。在「主頁」上,可以看到後退按鈕,而不是導航切換,並顯示標籤的標題。從標籤頁轉到根頁面

默認情況下,頁面緩存,並留在DOM如果他們導航 遠離,但仍然在導航堆棧(在 推(),例如退出的頁面)。從 導航堆棧(pop()或setRoot())上刪除時,它們被銷燬。

上面的聲明給了我一個期望,當我使用setRoot頁面從緩存中清除。這在使用普通頁面而不是在標籤中時似乎是正確的。

在標籤頁的類中,有一個函數在單擊按鈕時將根頁面設置爲home。

goToHome() { 
this.navCtrl.setRoot(HomePage); 
} 

我怎樣才能確保當我們返回到首頁有沒有後退按鈕和家庭使用的標題是在組件的HTML模板可用。

+1

能否請您通過獲取嘗試'rootNav'?它會像'constructor(private app:App,...){...}'然後是'this.app.getRootNav()。setRoot(YourPage);'如果這個工作,我會添加一個答案來解釋一切都有更多的細節 – sebaferreras

+1

謝謝你的作品。我會很感激解釋。 – Rik

+0

很高興聽到!我已經添加了解釋的答案:) – sebaferreras

回答

18

就像你可以在docs

請注意,每個<ion-tab>結合到[root]性質看,就像在上面的導航部分 。這是因爲每個 <ion-tab>實際上只是一個導航控制器。 這意味着每個 標籤都有自己的歷史堆棧,並NavController實例注入 到孩子每個標籤的@Components將是唯一的每個選項卡

所以設置頁面的權限時,您正在使用的來自該標籤的導航堆棧,而不是整個應用程序的導航堆棧。這就是爲什麼你需要做讓主導航堆棧:

constructor(private app: App,...) {...} 

然後

yourMethod(): void { 
    this.app.getRootNav().setRoot(YourPage); 
} 
+1

偉大的答案...我解決了我的問題謝謝:) –

+1

謝謝sebaferreras!它節省了我的時間。 –

+1

感謝它幫了我很多! –

1

只是嘗試這一點,工作非常適合我

this.childNavCtrl.setRoot(HomePage); 
+0

這是正確和更新的解決方案。 – YATO