首页 文章

为什么我们总是要在AuthGuard中注入ActivatedRouteSnapshot和RouterStateSnapshot

提问于
浏览
1

我是Angular 2的新手 . 在Angular.io路由教程中,我看到ActivatedRouteSnapShot和RouterStateSnapshot总是在AuthGuard函数中声明(注入):canActivate,canActivateChild,resolve ....但是,通常只使用1 . 你可以看到:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    let url: string = state.url;

    return this.checkLogin(url);
  }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Crisis> {
    let id = route.params['id'];

    return this.cs.getCrisis(id).then(crisis => {
      if (crisis) {
        return crisis;
      } else { // id not found
        this.router.navigate(['/crisis-center']);
        return null;
      }
    });
  }

那么为什么总是需要注入两者?

1 回答

  • 2

    canActivate 方法具有这些参数,因为您实现了CanActivate接口,这是一个所谓的Guard .

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
    

    因此,无论你是否需要它,你都拥有它,它们将在Angular调用方法时提供 .

    对于 resolve 方法,情况相同,您实现Resolve接口,您必须在其中实现resolve方法:

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<T> | Promise<T> | T;
    

    接口是 Contract ,因此是不可协商的 .

相关问题