角度2 rc.1とタイプスクリプトを使用する。コンポーネントがサブルートにロードされたときに、ルーティングパラメータをコンポーネントに渡すのに苦労しています。私は@angular/router-deprecated
パッケージを使用します。私ルートコンポーネントで角度2:ルートパラメータをサブルーチンに渡すにはどうすればよいですか?
は、Iのような経路を構成:
@RouteConfig([
{path:'/top', name:'Top', component: EndPointComponent},
{path:'/sub/...', name:'Sub', component: MiddleManComponent}
])
をここでは、パラメータ
import {Component} from '@angular/core';
import {RouteParams} from '@angular/router-deprecated';
@Component({
template: 'Route Params: {{routeParams.params | json}}'
})
export class EndPointComponent{
constructor(private routeParams:RouteParams){}
}
を読み取るしようとエンドポイント・コンポーネントここであります仲介コンポーネントとEndPointComponentへのサブルート
import {Component} from '@angular/core';
import {RouteConfig, ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {EndPointComponent} from "./endpoint.component";
@Component({
directives: [ROUTER_DIRECTIVES]
template: `<router-outlet></router-outlet>`
})
@RouteConfig([
{path: '/end', name: 'End', component: EndPointComponent, useAsDefault: true}
])
export class MiddleManComponent {}
routeParams
オブジェクトがEndPointComponent
から正常に読み取られるのは、コンポーネントがトップレベルルート(ルートコンポーネントの「Top」という名前のルート)からロードされている場合です。しかし、EndPointComponent
に移動してMiddleManComponent
に移動すると、パラメータは常に空になります(ルートコンポーネントの「Sub」というルート経由)。
ルートを解決する前に、子ルータは親からのパラメータをスクラブしますか?それはあまり意味がないので、私は何かが欠けていると思う。私の質問は簡単です:どのように私はルートのパラメータをサブルートに渡すのですか?
PS:私はdemo this setupへのプランナーを構築しようとしましたが、なぜアプリケーションが読み込まれないのか分からないときは、私は諦めました。
ありがとうございます。これは本当に興味深い解決策です。それは少しハッキーのようですが、それはありませんか?知っている限り、Angular 2にはこれに対する組み込みの解決策はありませんか?私のユースケースは、私のコンポーネントアーキテクチャがひどく構想されていない限り、本当によくあると思います。 PS:既存のソリューションが存在する場合は、@ angle/router-deprecatedよりもむしろ '@ angle/router'にある可能性があります – BeetleJuice
同じコンポーネントを別のルートでインスタンス化しようとすると、レベル。最上位のルートのパラメータが必要な場合は、基本的にサービスをインスタンス化し、他のコンポーネントを1つのレベルにプッシュするだけの専用のコンポーネントが必要です。これが、トップレベルのコンポーネントがRouteParamsにアクセスできないという設計ミスであると私が思う理由の1つです。しかし、サービスを使用してコンポーネント間でデータを共有することは、Angularアプリケーションの共通の設計パターンです。 – awiseman
私はそれをして汚い感じが、それは動作します。 – BeetleJuice