从父组件到子组件获取param

时间:2017-10-25 14:37:19

标签: angular angular-router

最近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

2 个答案:

答案 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;