在布局组件上获取参数[' id']

时间:2018-03-08 07:37:17

标签: angular angular2-routing

我需要在布局组件上获取路径参数id。

routing.ts:

{
 path: 'car/:id',
 component: CarDetailComponent,
 canActivate: [AuthGuard]
}

简单地说,我这样做是为了在我的 layout.component.ts上获取Car ID:

 public param_id: string;
 constructor(private route: ActivatedRoute) {
    this.route.params.subscribe((params: Params) => {
      if (params['id']) {
        this.param_id = this.route.params['id'];
        console.log(params['id']); // undefined
      }
    });
 }

param_id始终返回undefined。

注意:每当更改页面时我都需要所有params id,而不仅仅是car。所以我在layout.component上调用params(它是包含路由器插座的常用页面)

感谢。

2 个答案:

答案 0 :(得分:1)

它不起作用,因为布局组件路由不包含参数id。

您必须访问this.route的子项并迭代它们以获取ID。

类似

this.route.children.forEach(child => {
   child.params.subscribe(...); // do what you wanna do
}

当孩子还有孩子时,这变得越来越复杂。如果您确实需要从布局组件中访问id参数,我建议您使用ngrx/store或单向singleton service之类的内容。

答案 1 :(得分:0)

你得到这个未定义的原因是在这一行:

this.param_id = this.route.params['id'];

更改它:

this.param_id = params['id'];

一切都会有效