簡體   English   中英

從父組件到子組件獲取參數

[英]Get param from parent component to child component

到目前為止,對Angular路由器進行了許多更改,我不知道該如何做。

我在名為“ eventId”的父組件上有一個參數,它在地址欄中:

http://localhost:4200/event/1

在這種情況下,其值為1。

這是我在路由組件中聲明的方式:

{ path: 'event/:eventId', loadChildren: './event/event.module#EventModule', canActivate: [AuthGuard] },

因此,我有一個子組件,該子組件很簡單:

http://localhost:4200/event/1/event-travel-agents/purchase-plans

在我的購買計划組件上,如何獲取eventId?

我試過了:

import { ActivatedRoute } from '@angular/router';
export class PurchasePlansComponent implements OnInit {
  eventId: number;
  constructor(private activatedRoute: ActivatedRoute) {
    this.subscription = activatedRoute.parent.params.subscribe(
      (param: any) => {
        this.eventId = param['eventId'];
      }
    );
  }
  ngOnInit() {
    alert(this.eventId);
  }
}

但這僅在我處於此級別時有效:

http://localhost:4200/event/1/event-home

但是,如果我處於這個級別,它將無法正常工作:

http://localhost:4200/event/1/event-travel-agents/purchase-plans

在Angular 5.2版本中,有paramsInheritanceStrategy的新功能,該功能現在可以幫助您解決問題。

您可以按以下方式使用它

@NgModule({
    import :[RouterModule.forRoot(router,{paramsInheritanceStrategy :'always'})]
})

它定義了路由器如何將參數,數據和已解析的數據從父級合並到子級

可用的選項有:

1. emptyOnly: default ,僅繼承無路徑或無組件的父參數

2. 始終:啟用父參數的無條件繼承。

在組件中,可以按以下方式使用它:

 constructor(private route: ActivatedRoute) {}

 ngOnInit() {
    this.eventId = +this.route.snapshot.paramMap.get("eventId");
  }

感謝你的幫助。 答案很冗長。 沒有訂閱,該行是:

this.eventId = this.activatedRoute.parent.snapshot.parent.params.eventId;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM