【问题标题】:Why do we always have to inject both ActivatedRouteSnapshot and RouterStateSnapshot in AuthGuard为什么我们总是要在 AuthGuard 中同时注入 ActivatedRouteSnapshot 和 RouterStateSnapshot
【发布时间】:2017-03-30 10:20:01
【问题描述】:

我是 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;
      }
    });
  }

那么为什么总是需要同时注入呢?

【问题讨论】:

    标签: angular routing


    【解决方案1】:

    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;
    

    接口是一种合同,因此不可协商。

    【讨论】:

      猜你喜欢
      • 2012-09-04
      • 2020-05-02
      • 2017-10-27
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      相关资源
      最近更新 更多