angular - Angular CanActivate 守卫 - 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 团队创建更好的解决方案。
问候。
推荐阅读
- python - 创建表时出现Python sqlalchemy错误
- sql - 使用一条 SQL 命令将数据添加到多对多关系
- wordpress - 如何在特定的 DIV 中显示 HOVERED wordpress 帖子的特色图片?
- javascript - 客户端的 Html 缩小器
- sql - 如何计算以年和月为单位的时间段
- angular - 使用 Cypress 触发 Angular Ivy 变化检测
- javascript - NodeJS:如何重定向到外部 URL?
- java - JPA/Hibernate - 对象不保存到数据库
- hyperledger-fabric - Hyperledger Fabric:尝试加入对等通道时出现“错误:错误的建议响应 500:访问被拒绝”
- shell - 用环境变量中存在的不同标记值替换第一个 xml 标记的第一次出现