2017-09-26 40 views
4

當用戶首次查看主屏幕時 - 它們通過this.nav.setRoot(Page)發送到那裏。當我將三個其他頁面設置爲根頁面時,這會出現問題。例如 - 我轉到設置爲root的主頁,以便首次加載主頁數據。然後用戶導航到消息頁面。然後用戶返回主頁,數據再次被重新加載。我不希望這種情況發生。我只想調用它一次,但由於setRoot,它刷新頁面。就像navCtrl.push(Page)和.pop一樣,數據不會刷新。我有漢堡包導航風格,這就是爲什麼我在漢堡包導航中爲每個頁面設置了根。查看時不希望頁面刷新 - Ionic 2+

app.comp.ts

openPage() { 
    this.nav.setRoot(Page); 
    } 
    openPageTwo() { 
    this.nav.setRoot(MessagesPage); 
    } 

如何重寫nav.setRoot刷新?或者完全使用其他東西?

感謝

回答

1

通過設置使用navCtrl.setRoot()一rootpage,你告訴離子這個頁面是應用程序的導航樹的開始。例如,登錄後,您應該.setRoot(HomePage);

當您想從HomePage導航到MessagesPage時,應該使用navCtrl.push()彈出主頁頂部的MessagesPage。例如; navCtrl.push(MessagesPage);

+0

與該方法的問題是,漢堡包菜單導航功能就無法正常工作此提供商。 – userlkjsflkdsvm

+0

@userlkjsflkdsvm:而不是推,你有沒有嘗試過使用模式,看看是否適用於漢堡菜單? – Ari

+0

好吧,那什麼都行不通? '不工作'是安靜的通用..你的菜單沒有顯示?沒有點擊行爲? – JoeriShoeby

2

究竟你在哪裏刷新你的數據?在什麼功能?

生命週期事件

我覺得你的問題將通過使用正確的lifecycle event來解決。例如,ionViewDidLoad

加載頁面時運行。該事件僅在每個頁面創建時發生一次。如果頁面離開但被緩存,則此事件在後續查看時不會再次觸發。 ionViewDidLoad事件是放置頁面設置代碼的好地方。

您是否嘗試過刷新數據?

全局變量或服務

作爲替代方案,您可以創建一個全局變量或保存您的數據的服務。一旦您首次將Root設置爲頁面,請執行刷新並更新全局值,並且不會在您將其設置爲該頁面的後續時間刷新它。這不是我最喜歡的方式,但會爲你做這項工作。

標籤:

,而不是設置根幾次,你可能會想嘗試ionic tabs

+0

兩個替代工作:(我不能使用標籤,最終,它會擁擠 – userlkjsflkdsvm

+0

您需要提供更多的細節。請參閱我的問題上面 – Ari

0

你可以使用一個提供者,因爲它被存儲在內存中,每一個注入它的對象都會獲得它的屬性和數據。

some-provider.ts

import { Injectable } from '@angular/core'; 

@Injectable() 
export class SomeProvider { 

    public data: DataModel; 

    constructor(public http: Http) { 
    } 
} 

然後導入您的應用程序的模塊providers變量。

後,得到你的組件的構造

some-page.ts

@Component({ 
    selector: 'app-some-page', 
    templateUrl: 'app-some-page.html' 
}) 
export class AppSomePage { 

    data: DataModel; 

    constructor(public someProvider: SomeProvider) { 
     this.data = this.someProvider.data; 
    } 
}