角度2.1.0、ルータ3.1.0。角度2.1 - ルーティング中のコンポーネントの再作成
ダッシュボードコンポーネントを作成しているうちに、ルーティングするたびに最初から作成されていることに気づきました。それから、私はHerosデモプランナーのTourをチェックしました - 同じ振る舞いです。 DashboardComponent
export class DashboardComponent implements OnInit {
heroes: Hero[] = [];
constructor(private heroService: HeroService) {
console.log('DashboardComponent constructor')
}
ngOnInit(): void {
this.heroService.getHeroes()
.then(heroes => this.heroes = heroes.slice(1, 5));
console.log('DashboardComponent ngOnInit')
}
}
の
変更は、ここでplunkerです。開発者コンソールを開きます。プランナーを実行してください - DashboardComponent constructor
とDashboardComponent ngOnInit
の2つのログが表示されます。 Heroes
をクリックしてDashboard
に戻ってください - 再び2ログ:ngOnInit
を構築して呼び出してください。
Plunkerは古いライブラリを使用することがあります。私はJohn Papa gitからTOHをクローン作成しました(彼はAngularとrouterの同じバージョンを使用しています)。コンソールログはDashboardComponent
に変更しました。結果 - 同じ。
ngOnDestroy
にDashboardComponent
を追加しました。これはダッシュボードを離れるときに呼び出されます。それはデザインの振る舞いに似ています。メリットは何ですか?すでに作成されたコンポーネントを再利用するにはどうすればよいですか?
この破棄/作成動作を防止する方法はありますか(ルートへの切り替えを追加するなど)ですか? – koral
いいえ、現在、設定する方法はありません。私が見る唯一の方法は、カスタムルータアウトレットを作成し、コンポーネントをいつ再作成するかを気にすることです。より良い方法は、状態を親コンポーネントによって提供されるサービスに移動し、作成時にこの状態から再作成されたコンポーネントを更新することです。 –
利点は、Angular2コードが簡単だということです。ルータは、いつコンポーネントをリリースできるかを知る必要があります。そのルートに戻ることはできないので、コンポーネントを保持するためにはどうしたらよいでしょうか? –