首页 文章

如何在Angular 7中使用URL中的get参数和路由器

提问于
浏览
0

我对Angular 7路由器感到很困惑 . 我想从URL中的任何位置使用get参数“token” .

我使用以下代码来定义几个路由 .

const myRoutes: Routes = [
{ path: 'register/:token', component: RegisterComponent },
// { path: 'register?token=:token', component: RegisterComponent },
// { path: 'register:token', component: RegisterComponent },
{ path: 'register', component: RegisterComponent },
// ...
]

使用第一个定义的路径,我可以使用“register / mytoken " and " register /?token = mytoken”来获取令牌 .

// Token from register/123
this.token = this.route.snapshot.paramMap.get('token')
// Token from register/?token=123
this.route.queryParams.subscribe(params => {
  if (params.token != null)
    this.token = params.token;
});

任何时候我在浏览器中调用网站时尝试直接提供我的令牌作为get-parameter(“register?token = mytoken "), the router will redirect me to " / register " and I can't get the token with my code above. But when i use " register /?token = mytoken " i will be redirected to " register?token = mytoken”并且可以使用该令牌 .

如何通过“register?token = 123”提供访问页面的路由并检索令牌?

1 回答

  • 0

    感谢@Gilsdav,我应该自己在"clean"项目中对此进行测试 . 我找到了我的同事的一些代码块,它干扰了路由器的get参数:

    var loc = window.location.pathname;    
    if ((loc == "/register") || (loc == "/"))  {
      this.router.navigate(['/landing']);
    }
    

    此重定向剥离get参数 . 我可以通过添加来验证代码的重定向 .

    imports: [
        RouterModule.forRoot(
          routes,
          { enableTracing: true } // <-- debugging purposes only
        )
    ]
    

相关问题