Angular路由守卫里怎么获取路由参数?
我在用 Angular 的 CanActivate 守卫做权限校验,但需要根据 URL 里的 id 参数来判断用户是否有权限,可是在守卫里拿不到 ActivatedRoute 的 paramMap,试了注入 ActivatedRoute 也不行,总是空的。
网上有人说要用 Router.getCurrentNavigation(),但我试了返回的是 null,是不是因为守卫执行时导航还没完成?有没有靠谱的办法能拿到这个参数啊?
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): boolean {
// 这里想拿到 /user/123 中的 123
const id = route.paramMap.get('id'); // 但这里 id 是 null!
return this.checkPermission(id);
}
route.params而不是paramMap,而且要看参数是在路径里还是查询参数。两种常见情况:
1. 如果是路径参数(比如 /user/:id):
2. 如果是查询参数(比如 /user?id=123):
另外注意路由配置要写对,比如路径参数要这样配:
别用
getCurrentNavigation()这种骚操作,直接改上面那样就行。我当初也折腾半天才发现是 basic 问题,md...