Angular 单击设置routersnapshot-角度

Angular 单击设置routersnapshot-角度,angular,Angular,我目前有我的auth guard设置,当用户在地址栏中放置列表的站点url时,未经身份验证时,它会将他们带到登录页面。一旦通过身份验证,它会像应该的那样重定向到原始URL。这部分很好用 我有另一个场景,当用户单击登录按钮购买他们当前在只读页面中看到的产品时,我尝试存储路由器快照,这样在他们登录后,它会将他们重定向到相同的产品页面进行购买,但是我不知道如何让按钮点击逻辑工作,这样它就可以与我当前的AuthGuard设置一起工作。我没有找到一个好的例子。也许我误解了它的工作原理。谢谢你的帮助 aut

我目前有我的auth guard设置,当用户在地址栏中放置列表的站点url时,未经身份验证时,它会将他们带到登录页面。一旦通过身份验证,它会像应该的那样重定向到原始URL。这部分很好用

我有另一个场景,当用户单击登录按钮购买他们当前在只读页面中看到的产品时,我尝试存储路由器快照,这样在他们登录后,它会将他们重定向到相同的产品页面进行购买,但是我不知道如何让按钮点击逻辑工作,这样它就可以与我当前的AuthGuard设置一起工作。我没有找到一个好的例子。也许我误解了它的工作原理。谢谢你的帮助

auth-guard.ts

import {
  CanActivate,
  ActivatedRouteSnapshot,
  RouterStateSnapshot,
  Router
} from "@angular/router";
import { Observable } from "rxjs";
import { Injectable } from "@angular/core";
import { AuthService } from "./auth.service";

@Injectable()
export class AuthGuard implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}

  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): boolean | Observable<boolean> | Promise<boolean> {
    this.authService.redirectUrl = state.url;
    const isAuth = this.authService.getIsAuth();
    if (!isAuth) {
      console.log("Logging out in AuthGuard");
      this.router.navigate(["/login"]);
    }
    return isAuth;
  }
}
导入{
激活,
激活的路由快照,
路由器状态快照,
路由器
}从“@角度/路由器”;
从“rxjs”导入{observeable};
从“@angular/core”导入{Injectable}”;
从“/auth.service”导入{AuthService}”;
@可注射()
导出类AuthGuard实现了CanActivate{
构造函数(私有authService:authService,私有路由器:路由器){}
激活(
路由:ActivatedRouteSnapshot,
状态:RouterStateSnapshot
):布尔值|可观察|承诺{
this.authService.redirectUrl=state.url;
const isAuth=this.authService.getIsAuth();
如果(!isAuth){
log(“在AuthGuard中注销”);
this.router.navigate([“/login”]);
}
返回isAuth;
}
}

我会使用本地存储或会话存储。在产品页面和登录成功之间可能会发生其他事情,所以您需要关心更多的事情。例如,检查guard是否有选中的产品,并重定向到其页面,如果有很好的建议。我去了,它做到了,它工作得很好。谢谢你。只是补充一点——为了广泛使用,cookies可能会提供更多的价值