私はアングル4のアプリケーションを作成しています。私は自分のURLからさまざまな深度レベルにあるパラメータを取得する必要があることが起こります。このパラメータは、私が自分のパラメータを取得できる方法では統一されていません。ActivatedRouteのすべてのパラメータを角度で集めることは可能ですか?
私たちは、このURLがあるとします。これは我々がDrawDetailComponent内にある検討していることを
ngOnInit() {
this.activatedRoute.parent.parent.params.subscribe((params: Params) =>
{this.companyId = params['companyId'];
});
this.activatedRoute.parent.params.subscribe((params: Params) =>
{this.cupId = params['cupId'];
});
this.activatedRoute.params.subscribe((params: Params) =>
{this.drawId = params['drawId'];
});
}
注:
https://mysite/companies/:companyID/cups/:cupId/drawings/:drawId
通常、角度のドキュメントによると、私たちは何かなどを行う必要があるでしょうこれは、この階層の最後の子であるコンポーネントにあることを意味します。
また、この階層の深さによっては、activateRouteに| subtract .parentを追加して、探しているパラメータを正常に取得できる正しい位置にある必要があります。
URLのすべてのパラメータを同じ呼び出しで使用することは可能ですか?私たちはURLからすべてのパラメータを取得するために、均一ではなく、深さに依存する方法を持っていると思い
this.activatedRoute.parent.parent.params.subscribe((params: Params) =>
{this.companyId = params['companyId'];
{this.cupId = params['cupId'];
{this.drawId = params['drawId'];
});
:よう
何か。
は、実は私たちも何かしようとした:
const property = 'companyId';
this.activatedRoute.pathFromRoot.forEach((item) => {
if (item.snapshot.params.hasOwnProperty(property)) {
item.params.subscribe((params: ParamMap) => {
this.companyId = params[property];
});
}
});
をしかし、我々はより良い、より一般的な、検証可能な方法を見つけることを願っています。
通常、Djangoのようなフレームワークでは、開発者は1つのステップでURLから必要なすべての情報を収集することができます。 Angularの場合にはこれらのパラメータの変更を自動的に処理するサブスクリプションがあればOKですが、IMHOでは快適で+テスト可能ではありません。
ここをクリックして親を反復することができます。あなたはフレームワークと戦っていますが、ルータはそのように使われることは想定されていません。角はDjangoではありません。開発者はA1ルータから難しいレッスンを学びました。 A4ルータはモジュラー型に設計されており、これはカプセル化の特別なケースと考えられます。子ルートは親を認識せず、 'データ'、自分のparams、共通のプロバイダを通じて必要なものをすべて受け取るべきです。あなたはおそらく別の方法で解決されるはずのアプリケーションの設計にXYの問題があります。 – estus
ありがとう、面白い答え、別の方向、おそらくより適切な方向に私を指している。このXY問題を説明するリンクをいくつかご紹介ください。 一方、A、B、C、Dの4つのコンポーネントが前のコンポーネントの中にネストされているとします。 3つの親コンポーネント。各コンポーネントの内部で@Inputsを使用してデータを正しく共有する必要がありますか?Dコンポーネントは3つの入力を持つことになり、親からの単純なパラメータへのアクセスのみが可能になります。 – pinkfloyd