如何从父组件访问子routeParams?

时间:2016-01-26 05:13:55

标签: angular

我有一个"项目"我试图访问的页面是否正在查看项目列表或单个项目,但不使用子组件。

考虑:

App Router Config

{ path: '/projects/...', component: ProjectCmp, name: 'Projects' },

然后项目组件:

    { path: '/', useAsDefault:true,component: ProjectDashboardCmp, name: 'List' },
    { path: '/:id/', component: ProjectDashboardCmp, name: 'Dashboard' },
    { path: '/:id/shows', component: ShowCmp, name: 'Shows' },

我如何获得" id"传递给"仪表板"路线?它不是这个组件的一个参数,所以我无法在没有孩子踢它或服务的情况下访问它。

示例,在projects组件中:

constructor(public params: RouteParams) {
    this.projectId = params.get('id');
    console.log("The project Id is:",this.projectId); 
    //The Project Id is:null

但是在projectDashboardCmp中它按预期工作。

问题是我做了类似的事情:

<router-outlet *ngIf="!this.projectId"></router-outlet>

在项目组件中,它不会加载子路径而只是死...

1 个答案:

答案 0 :(得分:1)

如果其他人对如何访问子路由参数感兴趣 - 这是解决方案(Angular 4.0):

// Inside ngOnInit() method of a parent component
this.route.children[0].params
    .subscribe((childParams: Params) => this.projectId = +childParams['id']);

注意:this.route.children可以有多个子路由。在我的情况下 - 它只有一个,所以我选择了[0]

总的来说,我不建议使用这种方法,除非你别无选择