Angular 4のActivatedRouteSnapshot
とActivatedRoute
の違いは何ですか? ActivatedRouteSnapshot
はActivatedRoute
の子であり、ActivatedRoute
にはActivatedRouteSnapshot
が含まれることを理解しています。
ちなみに、この質問への回答を求めてGoogle検索を実行しようとしましたが、検索結果が理解できるものは見つかりませんでした。
ありがとうございました!
ActivatedRoute
再利用可能 なので、ActivatedRouteSnapshot
は、ActivatedRoute
の特定のバージョンを表す不変オブジェクトです。 ActivatedRoute
と同じプロパティをすべてプレーン値として公開し、ActivatedRoute
はオブザーバブルとして公開します。
実装のコメントは次のとおりです。
export class ActivatedRoute {
/** The current snapshot of this route */
snapshot: ActivatedRouteSnapshot;
ルーターがコンポーネントを再利用し、新しいアクティブ化されたルートを作成しない場合、同じActivatedRouteSnapshot
に対して2つのバージョンのActivatedRoute
があります。次のルーティング構成があるとします。
path: /segment1/:id,
component: AComponent
次に移動します:
/segment1/1
activatedRoute.snapshot.params.id
に1
としてパラメーターがあります。
次に移動します:
/segment1/2
activatedRoute.snapshot.params.id
に2
としてパラメーターがあります。
以下を実装することで確認できます。
export class AComponent {
constructor(r: ActivatedRoute) {
r.url.subscribe((u) => {
console.log(r.snapshot.params.id);
});
ルートからパラメーターを取得するには2つの方法があります。
route.snapshot.paramMap.get
)。初期化中に読んでください。コンポーネントの初期化中にパラメーターの初期値を1回だけ必要とし、ユーザーが同じコンポーネントを使用している間にURLが変更されることを期待しない場合は、スナップショットを使用します。
route.paramMap.subscribe
)。初期化中にサブスクライブします。ユーザーがまだ同じコンポーネント上にいる間にルートが変更される可能性がある場合、Observableを使用します。したがって、コンポーネントの初期化は再度呼び出されませんが、URLが変更されると、observableはサブスクライブされたロジックを呼び出します。
一般的に言えば、よくわからない場合は登録が最も安全なルートです