Angular 从父组件到子组件获取参数
有这么多的修改角路由器到最近我不知道如何去做这件事 我在地址栏中的父组件“eventId”上有一个参数: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
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会改变