3

angular2 Typescript アプリケーションでは、ルーターを使用します。コンポーネントは非常に汎用的であり、ルーターから取得するパラメーターに基づいて動作が劇的に変化します。

アプリケーションは開発の初期段階にあり、私が言及している動作は最近観察されました。コードの変更によるものなのか、ライブラリの 1 つに重大な変更があったためなのかはわかりません。

という名前のコンポーネントを考えてみましょうList。表示する必要があるエンティティ タイプなどの情報をコンテキスト (ルート、ラッピング コンポーネントなど) から取得します。

ルートを変更すると、Listコンポーネントは再インスタンス化されませんが、そのパラメーターは更新されます。これらのパラメーターを使用しngOnInitてコンポーネントをセットアップするため、後で変更しても効果はありません。

変更検出を使用してこの問題を回避できることはわかっていますが、そうではありません。その理由は、これにより、開発者が発見するのがはるかに困難な回帰バグ (たとえば、People リストに移動してから何かを行う、Orders リストに移動して、あるべきではない何かが存在するなど) を導入しやすくなるからです。 、テストして再現します。それらは本番環境に漏れる可能性がはるかに高くなります。

ルートが変更されたときに、Angular に List コンポーネントを再作成させるにはどうすればよいですか。

その他の観察事項: ルーターで、List コンポーネントを表示しないルートに移動してから List に戻ると、コンポーネントが再インスタンス化されます。

4

3 に答える 3

1

サブスクライブする代わりに、asyncパイプを使用して Observable の最後の値を表示できます。

doc:パイプ

于 2016-10-21T16:37:38.800 に答える