gpt4 book ai didi

Angular 2导航到同一路线并更新路线数据

转载 作者:太空狗 更新时间:2023-10-29 19:34:38 26 4
gpt4 key购买 nike

有没有办法强制路由器导航到同一条路线,以便通过两次调用此 canActivate 守卫来更新路线数据:

@Injectable()
export class LevelGuard implements CanActivate {

private user_query_: string;
private level_query_: string;

constructor(private router_: Router, private query_resolver_: QueryResolver) { };

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {

let user: string = route.params["user"];
let level: string = route.params["level"];

if (!user && !level) { //=> "/create"
this.query_resolver_.setQuery({ user: this.user_query_ || "none", level: this.level_query_ || "none" });
this.level_query_ = "";
this.user_query_ = "";
return true;
}
else if (user && !level) { //=> "/create/:user"
this.router_.navigate(["/create"]);
this.level_query_ = "none";
this.user_query_ = user;
return false;
}
else { //=> "/create/:user/:level"
this.router_.navigate(["/create"]);
this.level_query_ = level;
this.user_query_ = user;
return false;
}
};
}

如果路由已经是“/create”,那么当这个 canActivate 守卫重定向到“/create”时,它应该为“/create/:user”和“/create/:user/:level”做这件事,守卫不会被第二次召唤。有一个更复杂的路由方案可以绕过这个问题,但这会大大简化它。

编辑:解决这个问题的一种方法是添加一个虚拟组件,导航到它然后返回到“/create”,但它会导致明显的转换并且组件不会被重用。

this.router_.navigate(["/redirect"]).then((nav) => {
this.router_.navigate(["/create"]);
});

最佳答案

canActivate 不适用于子路由。

您需要使用canActivateChild 并将其设置在您的路由器上:

路由器

{
path: '/create',
loadChildren: 'yourModule#YourModule',
canLoad: [LevelGuard ],
canActivateChild: [LevelGuard ]
},

守卫

只需添加您的LevelGuard:

canActivateChild() {
// your code here
}

关于Angular 2导航到同一路线并更新路线数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com