3

我有一个像这样导航的组件

this.router.navigate(['results'], { state });

一旦在那里我抓住了contructor中的数据

constructor(private router: Router) { 
  const { state } = this.router.getCurrentNavigation().extras;
}

我想设置一个警卫来检查这些数据的存在,否则导航到其他地方

@Injectable()
export default class RouteHasDataGuard implements CanActivate { 
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        return !!state.root.data;
    } 
}

但这不起作用。你能帮我解决这个问题吗?

4

2 回答 2

0

不要在保护构造函数中阅读额外内容。阅读 canActivate() 方法中的附加内容。

@Injectable()
export default class RouteHasDataGuard implements CanActivate { 

  constructor(private router: Router) {}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    const { state } = this.router.getCurrentNavigation().extras;
    return !!state.root.data;
  } 
}
于 2021-01-28T15:29:38.130 回答
0

您可以像这样访问状态:

@Injectable()
export default class RouteHasDataGuard implements CanActivate { 
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
        return !!window.history.state;
    } 
}
于 2020-09-21T10:58:53.407 回答