2015-11-11 6 views
15

私は角度2のウィンドウマネージャを構築しようとしています。基本的には、ウィンドウ間(ルーターのコンセントに注入されたコンポーネント)を失うことなくスワップできます状態。たとえば、顧客のリストに変更すると、製品情報フォームを編集しています。その後、製品フォームに戻って同じ状態で見つけます...可能でしょうか?ルータ上角度2:異なるコンポーネント間でスワップすることなく、それらを破壊する

+0

つまり、別のコンポーネントに移動するときにコンポーネントが破壊されるのを防ぐ方法がありますか? – cangosta

答えて

5

これは私がこの要件をどのように超えたかです。

ルートが変更されると、ウィンドウコンポーネントは破棄されます。したがって、これらのウィンドウインスタンスの間に状態を保存するには、手動でそれを注入されたサービスに格納する必要がありました。

各ウィンドウコンポーネントの状態を保存してロードするには、ルータが提供するライフサイクルフック、onActivate(next、prev)およびonDeactivate(next、prev)を使用しました。

EDIT

は一方で、私はこの機能を要求issue on Angular 2 github repoを開きました。

+0

どのように保存しましたか?状態? 'window'オブジェクトを使用していますか?私はそれを働かせることはできません。 –

+0

私は自分のビューに注入されたサービスに状態を保存しています – cangosta

+1

私は 'service'の部分を理解していますが、あなたは正確に何を保存しましたか?私は 'classのインスタンス'と 'window'オブジェクトで失敗しました。それ以外に何を保存するのですか? –

5

チェックアウトcanReusecanReuse in angular2 api docs

あなたはそれをルータを指定した場合、そこから離れて切り替えるときに文句を言わないあなたのコンポーネントを破壊します。

+0

こんにちはデニス、そうです...ドキュメントを見ると、あなたは絶対に正しいです!しかし、実装の詳細(https://github.com/angular/angular/blob/b0009f03d510370d9782cf76197f95bb40d16c6a/modules/angular2/src/router/router_outlet.ts)に目を通すと、次のようになります。 "新しい子コンポーネントが既存の子コンポーネントと異なるタイプである場合、これは 'false'に解決されます。新しいコンポーネントが異なるタイプである場合、古いコンポーネントを再利用することはできません。 再利用フックは、同じ種類のコンポーネントとの間で移動する場合にのみトリガされます。 – cangosta

+0

hmmm。私は理解するためにこれを実際に見なければならないだろう。私がそれを読む方法は、コンポーネントに何かを登録した後で、タイプを後で変更できなかった場合でした。 ['Cars']は、再利用されると常にCarsCmpに移動します。 –

+0

私はそれをもう少し見てきました。あなたはその制限について正しいと思います。私はそれをテストせずに真であるかどうかはわかりませんが、同じルートで2つの異なるコンポーネントタイプを使用できないように見えます。しかし、大きなことのように思える。 –

関連する問題