从参数位于路线Angular 6中间的网址获取ID

时间:2019-06-10 20:31:23

标签: angular

我正在使用Angular 6和一个路由保护器来保护应该进行以下操作的编辑路由:

  1. 检查并确保已登录用户(从存储中的jwt令牌获取用户对象。完成。
  2. 验证url参数中的ID是否与令牌中用户的ID相符。

我的路线是这样的/members/:id/edit

我已经有一个名为doesUserIdInUrlMatchUserIdInToken的函数,它将返回一个布尔值。

我的身份验证保护canActivate函数是这样的:

export class UserEditAuthGuard implements CanActivate {
  constructor(
    private auth: AuthService,
    private activatedR: ActivatedRoute,
    private router: Router,
    private alertify: AlertifyService,
    private userService: UserService
  ) {}

  canActivate(): boolean {
    if (this.auth.loggedIn()) {
      console.log(this.activatedR.params["id"]);
      console.log(this.activatedR.snapshot.paramMap.get("id"));
      return true;
    }

    this.alertify.error("You shall not pass!!!");
    this.router.navigate(["/home"]);

    return false;
  }

  //   this.userService.doesUserIdInUrlMatchUserIdInToken();
}

这两个控制台日志都返回nullundefined

1 个答案:

答案 0 :(得分:1)

使用router.url然后将其拆分以获取ID的简单方法

ID: any = null;
constructor(router: Router) {
 console.log(router.url); // This will print the current url
 let URL = this.router.url;
 let URL_AS_LIST = URL.split('/');
 this.ID = URL_AS_LIST[1];
}