2017-09-02 18 views
0

我使用nav.push()nav.pop()進行常規導航,但是當我不想讓用戶返回時(例如,在成功登錄後設置主頁) ,我用延遲加載使用nav.setRoot()。我還打電話setRoot('HomePage')刷新頁面,當用戶更新他們的個人資料。Ionic setRoot讓多個實例同時運行

但是,我遇到的問題是HomePage幾次加載。即使當我按下瀏覽器中的刷新按鈕時,控制檯中也會顯示更多實例!

我已通過app.component.ts中的事件偵聽器傳遞所有setRoot調用以跟蹤它被調用的次數,但一切看起來都正常。我試過使用appCtrl.getRootNav().setRoot(page, args),但沒有任何變化。

任何想法在哪裏看?在調用setRoot之後,我是否必須手動銷燬頁面或清除導航堆棧?

謝謝!

EDIT(一些代碼):

訂閱setRoot事件app.component.ts:

this.events.subscribe('nav:setRoot', (data) => { 
    let page = data['page']; 
    let args = data['data']; 
    if(args !== null && args !== 'undefined'){ 
    this.appCtrl.getRootNav().setRoot(page, args); 
    }else{ 
    this.appCtrl.getRootNav().setRoot(page); 
    } 
}); 

從任何頁,當我想設置一個新的根頁:

let arg = { page: 'HomePage'}; 
this.events.publish('nav:setRoot', arg); 
+2

'幾行代碼勝過千言萬語。你能分享幾行代碼嗎? – Sampath

+0

嗨Sampath,我編輯了我的問題來展示我如何做。導航過程並不真的需要那麼多的代碼。謝謝! – emiliosg

回答

0
ionViewWillUnload() { 
    this.events.unsubscribe("nav:setRoot") 
} 

這對我有效!

+0

感謝您使用此代碼段,這可能會提供一些有限的短期幫助。通過說明爲什麼這是一個很好的解決方案和解決問題的正確解釋[將大大提高](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)的長期價值,將使其對其他類似問題的未來讀者更有用。請編輯您的答案以添加一些解釋,包括您所做的假設 –