我目前有一个路由守卫,例如
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]));
}
我真的不喜欢。字符串操作对我来说不重要。
答案 0 :(得分:2)
我也有同样的感觉,并得到了类似的解决方案。主要问题是,如果我们使用构造函数注入ActivateRoute
,则会得到上一条路由。
他们计划通过ActivateRoute
方法而不是canActivate
通过ActivatedRouteSnapshot
。
这是票证: https://github.com/angular/angular/issues/22763
您可以保留您的解决方案,直到角度小组创建更好的解决方案为止。
致谢。