2017-09-26 16 views
4

ユーザーがホーム画面を初めて表示すると、this.nav.setRoot(Page)でホーム画面が表示されます。これは、ページにルートを設定する3つの他のページがある場合に問題が発生します。たとえば、ホームページに移動します。これは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()を使用してHomePageの上にMessagesPageをポップする必要があります。例えば; navCtrl.push(MessagesPage);

+0

上の問題を、このプロバイダを取得するには、ハンバーガーメニューナビゲーションが動作しないことです。 – userlkjsflkdsvm

+0

@userlkjsflkdsvm:プッシュの代わりに、モーダルを使って試したことがありますか?それがハンバーガーメニューで動作するかどうか確認してください。 – Ari

+0

さて、どうしてうまくいかないのですか?あなたのメニューは表示されていませんか?クリック行動はありませんか? – JoeriShoeby

2

正確にデータを更新していますか?どのような機能ですか?私はあなたの問題は、正しいlifecycle eventを使用することによって解決されると思います

ライフサイクルイベント

。たとえば、ionViewDidLoad

ページが読み込まれたときに実行されます。このイベントは、作成されるページごとに1回のみ発生します。ページが去ってもキャッシュされている場合、このイベントはその後の表示で再び発生しません。 ionViewDidLoadイベントは、ページのセットアップコードを配置するのに適しています。

あなたのデータを更新しましたか?代替案として

グローバル変数やサービス

、あなたはグローバル変数やデータを保持しているサービスを作成することができます。初めてsetRootをページに設定した後は、グローバル値をリフレッシュして更新し、その後、そのページにsetRootを実行したときにリフレッシュしないでください。これは私の好きな方法ではありませんが、あなたのために仕事をします。

タブ:

むしろ根を数回設定するよりも、あなたが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; 
    } 
} 
関連する問題