最近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
答案 0 :(得分:2)
在Angular 5.2版本中,有 paramsInheritanceStrategy 的新功能,可以帮助您解决问题。
您可以将其用作以下内容
.htaccess
它定义了路由器如何将父节点与子节点之间的参数,数据和已解析数据合并
可用选项包括:
1。 emptyOnly: 默认,仅为无路径或无组件继承父参数
2。 始终:启用父参数的无条件继承。
在组件中,您可以按如下方式使用它:
@NgModule({
import :[RouterModule.forRoot(router,{paramsInheritanceStrategy :'always'})]
})
答案 1 :(得分:0)
感谢您的帮助。 答案非常冗长。没有订阅,该行是:
this.eventId = this.activatedRoute.parent.snapshot.parent.params.eventId;