Angular CanActivate guard - createUrlTree相对导航

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular CanActivate guard - createUrlTree相对导航相关的知识,希望对你有一定的参考价值。

我目前有一个路线卫士,如

export class EntityGuard implements CanActivate 
  constructor(private readonly router: Router, ...) 

  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean | UrlTree> 

  ...

为URL激活此保护

basePath/select/10/123

意思是

basePath/select/:type/:id

当满足某个条件时,我需要强制导航回来

basePath/select/:type

我怎么能用createUrlTree做到这一点?例如。

if (...) 
   return of(this.router.createUrlTree([../', type]));

我需要设置

 relativeTo: parent 

选项。但是我似乎无法找到办法。


我目前的解决方案是

private navigateBack(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) 
  const end = state.url.indexOf(route.url[route.url.length - 1].path);
  const parentUrl = state.url.slice(0, end);
  return of(this.router.createUrlTree([parentUrl]));

我真的不喜欢。字符串操作对我来说很重要。

答案

我感觉到了同样的情况,并得到了类似的解决方案。主要问题是如果我们使用构造函数注入ActivateRoute,我们得到之前的路径。他们计划通过ActivateRoute方法而不是canActivate传递ActivatedRouteSnapshot

这是票:https://github.com/angular/angular/issues/22763

您可以保留您的解决方案,直到有角度的团队创建更好的解

问候。

以上是关于Angular CanActivate guard - createUrlTree相对导航的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 打字稿变量范围

Angular 2 - 路由 - CanActivate 与 Observable 一起工作

Angular 2 路由已弃用:如何检测 CanActivate?

Angular 8 在身份验证完成之前抑制 HTTP 调用

NestJS:如何在 canActivate 中模拟 ExecutionContext

canActivate 在订阅更改时不响应 Angular 2 路由器 AngularFire2