Angular 2:親コンポーネントからRouteParamsを取得する
2023-08-21 05:44:20
質問
親コンポーネントからRouteParamsを取得する方法は?
App.ts
:
@Component({
...
})
@RouteConfig([
{path: '/', component: HomeComponent, as: 'Home'},
{path: '/:username/...', component: ParentComponent, as: 'Parent'}
])
export class HomeComponent {
...
}
そして、その中の
ParentComponent
で、ユーザー名のパラメータを取得し、子ルートを設定することが簡単にできます。
Parent.ts
:
@Component({
...
})
@RouteConfig([
{ path: '/child-1', component: ChildOneComponent, as: 'ChildOne' },
{ path: '/child-2', component: ChildTwoComponent, as: 'ChildTwo' }
])
export class ParentComponent {
public username: string;
constructor(
public params: RouteParams
) {
this.username = params.get('username');
}
...
}
しかし、それでは、これらの子コンポーネントで同じ 'username' パラメータを取得するにはどうしたらよいでしょうか?上記と同じトリックをやってもダメです。なぜなら、これらのパラメータはProfileComponentか何かで定義されているからですか?
@Component({
...
})
export class ChildOneComponent {
public username: string;
constructor(
public params: RouteParams
) {
this.username = params.get('username');
// returns null
}
...
}
どのように解決するのですか?
UPDATEしてください。
Angular2 finalが正式リリースされたので、正しいやり方は以下の通りです。
export class ChildComponent {
private sub: any;
private parentRouteId: number;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.sub = this.route.parent.params.subscribe(params => {
this.parentRouteId = +params["id"];
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
ORIGINALです。
これは、私が "@angular/router": "3.0.0-alpha.6" パッケージを使用してそれを行う方法を示しています。
export class ChildComponent {
private sub: any;
private parentRouteId: number;
constructor(
private router: Router,
private route: ActivatedRoute) {
}
ngOnInit() {
this.sub = this.router.routerState.parent(this.route).params.subscribe(params => {
this.parentRouteId = +params["id"];
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
}
この例では、ルートは次のような形式になっています。/親/:id/子/:childid
export const routes: RouterConfig = [
{
path: '/parent/:id',
component: ParentComponent,
children: [
{ path: '/child/:childid', component: ChildComponent }]
}
];
関連
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] Angularの@Directiveと@Componentの比較
-
[解決済み】Angularでルート変更を検出する方法は?
-
[解決済み] AngularでEventEmitterに2つのパラメータを渡すには?
-
[解決済み] プロパティ 'X' はプライベートであり、クラス 'xyzComponent' 内でのみアクセス可能です。
-
[解決済み] 遅延のあるobservableを作成するには?
-
[解決済み] angularで「タイプ 'EventEmitter' は一般的ではありません」ERROR。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ng2 - ng-containerタグとng-templateタグの違い
-
[解決済み] Angular / Angular Materialでmat-horizontal-stepperのステップをプログラムで移動させることは可能ですか?
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] Angular 2で入力タグのファイルタイプで選択されたファイルをリセットする方法は?
-
[解決済み] 角度の2つのスイッチケース値
-
[解決済み] ngFor を使用して、Typescript Enum を文字列の配列として反復処理するにはどうすればよいですか?
-
[解決済み] Angularで確認ダイアログを作る簡単な方法?
-
[解決済み] Angular 2 - ルーティング - ObservableでCanActivateする。
-
[解決済み] Angular 2+でspec.tsファイルなしでComponentを生成する。
-
[解決済み] Angularアプリケーションに複数のHTTPインターセプターを追加する