为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查具有参数的匹配路线?(在路线守卫中)

如何检查具有参数的匹配路线?(在路线守卫中)

慕田峪9158850 2021-04-25 13:15:10
我定义了一条路由,该路由具有一个称为uuid的查询参数{path: 'is-protected/:uuid', component: protectedComponent, canActivate: [RouteGuardService]}在路由防护中,我需要检查url是否匹配并且路由参数(:uuid)是否为空。如果路线没有参数,我需要将其重定向到本地路线。我正在尝试使用if (state.url == 'is-protected'){  if( query param exists){    return true;  }  else {      this.route.navigate(['/']);  }}这不会起作用,因为state.url不包含查询参数,因此它将永远不会到达此代码块。有没有办法检查包含参数的路线是否存在并进行相应导航?
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我实现的一种可能的解决方案是在没有参数的情况下在路由器本身中创建重定向,并将其重定向到本地。


{ path: 'is-protected', redirectTo: 'home', pathMatch: 'full' }

如果查询参数不存在,这将处理。这种方法对我有用,因为我没有任何类似的路线或没有参数的路线。


现在在路线守卫中


if (state.url.indexOf('is-protected') > -1) {

    //this route will have the query param. If it didnt, it would be redirected automatically because of redirection added in list of routes

  if (condition I need to test) {

    return true

  } else {

    this.route.navigate(['/home']);

  }

}

如果有更好的方法或解决方案,请发表评论。谢谢!


查看完整回答
反对 回复 2021-05-06
?
慕慕森

TA贡献1856条经验 获得超17个赞

您应该注入构造函数路由:ActivatedRouteSnapshot


您可以像这样访问路线参数,并将其与您的期望值进行比较


let id;


if(route.paramMap.has('id')){

    assessmentId = route.paramMap.get("id");

}


查看完整回答
反对 回复 2021-05-06
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信