Angular 从父组件到子组件获取参数

Angular 从父组件到子组件获取参数,angular,angular-router,Angular,Angular Router,有这么多的修改角路由器到最近我不知道如何去做这件事 我在地址栏中的父组件“eventId”上有一个参数: http://localhost:4200/event/1 在本例中,其值为1 以下是我在路由组件中声明它的方式: { path: 'event/:eventId', loadChildren: './event/event.module#EventModule', canActivate: [AuthGuard] }, 因此,我有一个子组件,这是一条直线: http://localho

有这么多的修改角路由器到最近我不知道如何去做这件事

我在地址栏中的父组件“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
谢谢你的帮助。 答案很长。没有订阅,该行是:

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

Angular 5.2版本中有一个新功能paramsInheritanceStrategy,可以帮助您解决当前的问题

您可以按如下方式使用它

@NgModule({
    import :[RouterModule.forRoot(router,{paramsInheritanceStrategy :'always'})]
})
它定义路由器如何将参数、数据和解析数据从父级合并到子级

可用选项包括:

1.空:默认值,仅继承无路径或无组件的父参数

2.始终:启用父参数的无条件继承

在组件中,您可以按如下方式使用它:

 constructor(private route: ActivatedRoute) {}

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

(目前无法测试,只是想给您一个想法)您是否尝试过类似的方法:
activatedRoute.snapshot.parent.params['eventId']
?如果有错误,我认为它应该可以工作,因为您正在处理同一组件,如果没有,但我觉得应该可以。@deezg使用快照不适用于参数动态变化的场景,您需要订阅快照changes@RahulSingh为什么它不起作用?我看不出有任何迹象表明他的组件得到了重用。还是我遗漏了什么?@deezg他正在寻找特定参数的事件id,我猜,事件id会改变