angular - 如何在 CanActivate 守卫中获取 url 段

标签 angular angular2-routing

我正在使用守卫来确保用户在到达他们请求的页面之前进行身份验证。

一个特定的用例预见到用户输入带有一些查询参数的 url,例如 https://myserver.com/the-page-i-want?par1=val1&par2=val2

在守卫中,我需要检索参数和 url 段(即在本例中为 the-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 字符串,包括参数(即它包含 the-page-i-want?par1=val1&par2=val2/strong> 在这种情况下)。

如果我检查 route 参数的值,我可以看到我正在寻找的信息(即只是the-page-i-want) 存储在 _urlSegment 属性的某个深处,但不通过 API 提供。

我正在使用 Angular Router 3.4.9 运行 Angular v2.4.9

任何有关如何获取 url 段的建议将不胜感激。

最佳答案

您应该改用 route.url[0].path。根据ActivatedRouteSnapShot文档,route.url 应该返回 UrlSegment 的数组, 之后你可以访问你的 UrlSegment

path

关于angular - 如何在 CanActivate 守卫中获取 url 段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409381/

相关文章:

angular - Angular 2 中的路径变量

angular - 带参数的 RouterLink 的 RouterLinkActive (/dynamic)

javascript - OnChanges 不会在部分对象更改时触发

javascript - Angular 2,设置默认值以选择选项

angular - NPM 安装的应用程序(例如文件 C :\Users\name\AppData\Roaming\npm\ng. ps1)无法加载,因为在此系统上禁用了运行脚本

具有延迟加载的 Angular2 AOT 无法解析 [延迟模块的路径].ngfactory.ts

angular - 在 BehaviorSubject 中传递多个值

angular - 如何将管道发送到组件

javascript - 访问相同数据源时路由到新路由

angular - 导入 Angular 组件以在所有模块中可用