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

Angular 在布局组件上获取参数[';id';],angular,angular2-routing,Angular,Angular2 Routing,我需要获取布局组件上的路由参数id 路由。ts: { path: 'car/:id', component: CarDetailComponent, canActivate: [AuthGuard] } public param_id: string; constructor(private route: ActivatedRoute) { this.route.params.subscribe((params: Params) => { if (param

我需要获取布局组件上的路由参数id

路由。ts:

{
 path: 'car/:id',
 component: CarDetailComponent,
 canActivate: [AuthGuard]
}
 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
      }
    });
 }
简单地说,我这样做是为了在我的布局上获取汽车ID。component.ts:

{
 path: 'car/:id',
 component: CarDetailComponent,
 canActivate: [AuthGuard]
}
 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始终返回未定义的值

注意:无论何时更改页面,我都需要所有参数id,而不仅仅是汽车。所以我在layout.component上调用params(这是一个包含路由器出口的公共页面)


谢谢。

您得到此未定义信息的原因如下:

this.param_id = this.route.params['id'];
更改为:

this.param_id = params['id'];

并且所有将起作用

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

您必须访问this.route的子级
,并对其进行迭代以获取id

差不多

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

当孩子们也有了孩子时,这就变得更加复杂了。如果您确实总是需要从布局组件访问id参数,我建议您使用类似或单向的代码。

您是否在ngOnInit函数中尝试过相同的代码?(实现OnInit)很遗憾,这不起作用。我猜+params['id']只用于以数字而不是字符串的形式获取数据。很抱歉。然后尝试在没有加号的情况下执行此操作,您将获得字符串。我稍微改变了一下我的回答不,它甚至不起作用——如果(params['id']){}——代码上面有块。也许试着把它从构造函数移到ngOnInit?别忘了存储订阅,当你的组件被破坏时,它们必须被取消订阅,否则,您将导致内存泄漏。使用forEach而不是subscribe是一个坏主意吗?如果你用不同id的car/id打开url,Subscribe将继续发出更改,而forEach则不会。