【问题标题】:Angular 2 - Why do ActivatedRoute.params returns empty ObjectAngular 2 - 为什么 ActivatedRoute.params 返回空对象
【发布时间】:2017-04-25 09:32:53
【问题描述】:

我正在尝试访问路由器防护中的:id 路由参数,但由于某种原因,它总是返回一个空的Object{}

一开始我不知道该怎么做,所以我用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(我试过paramsqueryParams):

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

【问题讨论】:

  • 我对此没有真正的解决方案,但是虽然您没有真正的答案,但也许您可以使用“this.router.url.split('/')[4]”得到身份证。希望有人能救你:)
  • @Powkachu 谢谢,我认为也许 Günter 是对的(他删除了他的答案)由于某种原因,参数尚未“集成”到路由器中......

标签: angular typescript angular-routing


【解决方案1】:

我通过将以下内容传递给我的后卫中的canActivatefunction 解决了这个问题。

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

最初我在构造函数中得到route: ActivatedRouteSnapshot,即使我使用.snapshot,它也没有产生预期的结果。不,我收到了我关于要导航到的路线,并且可以从那里检索参数。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多