Angular 2 - 为什么ActivatedRoute.params返回空对象
问题描述:
我试图访问路由器后卫中的:id
路由参数,但由于某种原因,它总是返回一个空的Object{}
。Angular 2 - 为什么ActivatedRoute.params返回空对象
最初我不知道如何做到这一点,所以我用this question指向正确的方向,但它不会产生任何结果。这和这个关键区别在于我的问题在guard
。
这是我的路线声明app-routing.module
:
const dashboardRoutes: Routes = [
{
path: "dashboard/:id",
component: dashboard.DashboardComponent,
canActivate: [guard.LoggedInGuard],
children: [
{
path: "",
redirectTo: "home",
pathMatch: "full"
},
...
这是我的守护existsInDatabase.guard
(我都尝试params
& queryParams
):
constructor(
private router: Router,
private activatedRoute: ActivatedRoute
) { }
canActivate() {
console.log(this.activatedRoute.params);
this.activatedRoute.params.subscribe(param=> {
console.log(param); // logs empty Object{}
console.log(param['id']); // logs undefined
});
this.activatedRoute.queryParams.subscribe(param=> {
console.log(param); // logs empty Object{}
console.log(param['id']); // logs undefined
});
return true;
}
当我尝试从
导航时出现问题
http://localhost:4200/dashboard/136364285
到:
http://localhost:4200/dashboard/136364285/dock/1654321
如何获得136364285
?
答
我通过将以下内容传递给我的警卫中的canActivate
函数来解决此问题。
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
console.log(route.params['id']); // logs 136364285
return true;
}
本来我在构造函数中渐渐route: ActivatedRouteSnapshot
,即使我用.snapshot
,它没有产生预期的结果。不,我收到我的路线约导航到并可以从那里检索params。
我没有一个真正的解决方案,但虽然你没有真正的答案,也许你可以使用“this.router.url.split('/')[4]”来获得id。希望有人会拯救你:) – Powkachu
@Powkachu谢谢,我想也许Günter是正确的(他删除了他的答案)由于某种原因该参数尚未'集成'到路由器中...... – Zze