Angular CanActivate Guard-createUrlTree相对导航

时间:2019-04-29 13:49:01

标签: angular angular-routing

我目前有一个路由守卫,例如

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]));
}

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

1 个答案:

答案 0 :(得分:2)

我也有同样的感觉,并得到了类似的解决方案。主要问题是,如果我们使用构造函数注入ActivateRoute,则会得到上一条路由。 他们计划通过ActivateRoute方法而不是canActivate通过ActivatedRouteSnapshot

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

您可以保留您的解决方案,直到角度小组创建更好的解决方案为止。

致谢。