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

+0

我没有一个真正的解决方案,但虽然你没有真正的答案,也许你可以使用“this.router.url.split('/')[4]”来获得id。希望有人会拯救你:) – Powkachu

+0

@Powkachu谢谢,我想也许Günter是正确的(他删除了他的答案)由于某种原因该参数尚未'集成'到路由器中...... – Zze

我通过将以下内容传递给我的警卫中的canActivate函数来解决此问题。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { 
    console.log(route.params['id']); // logs 136364285 
    return true; 
} 

本来我在构造函数中渐渐route: ActivatedRouteSnapshot,即使我用.snapshot,它没有产生预期的结果。不,我收到我的路线导航到并可以从那里检索params。