Angular 角度-仅当使用router.navigate()方法路由时才允许路由

Angular 角度-仅当使用router.navigate()方法路由时才允许路由,angular,Angular,我的要求是,如果用户从地址栏手动更改浏览器URL,则阻止用户导航。路由只能通过angular应用程序(router.navigate())完成 我知道我们可以使用canActive属性实现路由保护 canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

我的要求是,如果用户从地址栏手动更改浏览器URL,则阻止用户导航。路由只能通过angular应用程序(router.navigate())完成

我知道我们可以使用canActive属性实现路由保护

canActivate(
        next: ActivatedRouteSnapshot,
        state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

}
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnashot):可观察的|承诺|布尔值{
}

但我不知道可以使用ActivatedRouteSnapshot或RouterStateSnashot的哪些属性来标识用户正在使用手动url更改在应用程序内部导航。请帮忙。

我认为ActivatedRouteSnapshot或任何其他类都不可能做到这一点

我想补充一点,这对于您的应用程序来说是一种奇怪的行为,因为这也意味着您不希望您的用户能够刷新您的页面。如果您担心通过手动导航到您的组件,您没有足够的数据使其正常工作,您可以使用您提到的防护装置


希望这能有所帮助

我最近遇到了这个问题,我想我已经解决了,或者至少它对我有用

canActivate(
  next: ActivatedRouteSnapshot,
  state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

  const nav = this.router.getCurrentNavigation();

  if (nav.id === 1 || nav.previousNavigation !== null) {
    this.router.navigate(['/somewhere']);
  } else {
    return true;
  }
}
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnashot):可观察的|承诺|布尔值{
const nav=this.router.getCurrentNavigation();
if(nav.id==1 | | nav.previousNavigation!==null){
this.router.navigate(['/somewhere']);
}否则{
返回true;
}
}
导航对象的属性“id”表示应用程序中用户浏览历史记录中的编号。因此id==1表示用户第一次通过浏览器地址输入,而不是通过路由器重定向。navigate()

如果用户已经在浏览应用程序,我们必须检查是否有以前注册的导航,并能够控制他们浏览的位置