Angular 在布局组件上获取参数[';id';]
我需要获取布局组件上的路由参数id 路由。ts: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
{
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则不会。