我正在使用警卫来确保用户在到达他们请求的页面之前进行身份验证。
特定用例预见用户输入包含某些查询参数的网址,例如 https://myserver.com/the-page-i-want?par1=val1&par2=val2
在守卫中我需要检索参数和网址段(例如 -page-i-want )。为此,我实现了以下代码
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const url = state.url;
const queryParams = route.queryParams;
// some other logic
}
}
我在运行代码时看到的是queryParams
变量实际上填充了包含查询字符串中传递的参数的对象。另一方面,变量url
包含整个url字符串,包括参数(即它包含 -page-i-want?par1 = val1& par2 = val2 在这种情况下)。
如果我检查route
参数的值,我可以看到我正在寻找的信息(即 the-page-i-want )存储在_urlSegment
属性的深处,但不是通过API提供的。
我使用Angular Router 3.4.9运行Angular v2.4.9
任何有关如何获取网址细分的建议都将非常受欢迎。
答案 0 :(得分:0)
您应该使用route.url[0].path
代替。根据{{3}}文档,route.url
应返回ActivatedRouteSnapShot数组,之后您可以访问path
的{{1}}