2015-11-26 14 views
13

私はルートの後ろにビューを持つアプリケーションを持っていますが、ルートが変更された時点から続行できる必要がありますが、戻った後、コンポーネントは初期状態。Angular2経路を変更するときのコンポーネントの状態を維持する

コンポーネントの状態を保持する方法はありますか?

+0

個別のコンポーネントに注入されたプロバイダとは対照的に、キーはアプリレベルのプロバイダ/サービスを持つことがあります。これについては、ここで少し説明します:http://stackoverflow.com/a/32807310。答えで説明したように、コンポーネントレベルのプロバイダは、ルートのコンポーネントが生成されるたびに作成されます。アプリケーションレベルのプロバイダ( 'bootstrap'の中で宣言されています)は一度作成されます(詳細については、このサイトを参照してください:http://www.syntaxsuccess.com/viewarticle/routing-in-angular-2)。あなたが良い解決策を考え出すなら、ここに投稿してください。 –

答えて

15

今固定のUpdate 2

カスタム再利用戦略を提供することを可能にするhttps://github.com/angular/angular/pull/13124によって新しいルータ用(2.3角度)。例えば

https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

アンギュラドキュメントhttps://angular.io/api/router/RouteReuseStrategy

更新2を参照してください。この答えはずっと前に廃止され、ルータのバージョン用です。

現在のルータで行う方法については、https://angular.io/docs/ts/latest/guide/router.html#!#guardsを参照してください。

あなたの成分はCanReuseを実装し

routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) { 
    return true; 
} 

からtrueを返した場合、コンポーネントは保持され、再利用の代わりに破壊され、再作成されます。

もう1つの方法は、共有サービスにデータを保存し、コンポーネントが再作成されたときにそこからデータをフェッチすることです。

+1

'CanReuse'リンクが壊れています。 – Hubro

+0

この回答が当てはまるルーターは、ずっと前から消えています。現在のルータで行う方法については、https://angular.io/docs/ts/latest/guide/router.html#!#guardsを参照してください。 –

3

新しいコンポーネントや古いコンポーネント(あなたは「戻る」ボタンを押して)同じコンポーネントタイプである場合にのみ、あなたがrouterCanReuseを使用することができます https://github.com/angular/angular/issues/5275

にこの正確なシナリオ上の未解決の問題があります。

コンポーネントが異なるタイプの場合、Günterは唯一のオプションとして、共有サービスに状態を保存することを提案しました。

+0

多くを検索した後、これは完全に私のために働いた: https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx –

+0

@ PhilipEncどのようにあなたはその仕事をしましたか?それを使用するときにナビゲートすれば、私のルートは動作しません。私は遅延読み込みを使用しています。 – Chrillewoodz

+0

私のアプリは遅延読み込みではありません。違いがあるかもしれません。 –

関連する問題