首页 > 解决方案 > Angular 库使用来自应用程序的扩展类

问题描述

我正在尝试在 Angular 中创建一个授权库

一个基本示例是授权库中的这个抽象类:

@Injectable({
  providedIn: 'root',
})
export abstract class AuthService {
  abstract isAuthenticated(): boolean;
}

在库中,我正在创建一个守卫,我希望该守卫使用授权服务:

@Injectable({
  providedIn: 'root'
})
export class MyGuard implements CanActivate {

  constructor(private auth: AuthService) {}

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

    if (this.auth.isAuthenticated()) {
      //Do something
    }

    ....
  }
}

在消费应用程序中,我想扩展授权服务:

Injectable({
  providedIn: 'root',
})
export class AppAuthService extends AuthService {

  isAuthenticated(): boolean {
// Do auth checks here 
  }

  anotherMethod(): void {
    // Do something extra
  }
}

然后在应用程序模块中更新提供程序

  providers: [
    {
      provide: AuthService,
      useClass: AppAuthService
    },
  ]

扩展授权服务在应用程序中运行良好,但守卫仍在使用基础服务并返回以下错误:

ERROR 错误:未捕获(承诺中):TypeError:this.auth.isAuthenticated 不是函数 TypeError:this.auth.isAuthenticated 不是函数

如何让警卫使用覆盖的 AppAuthService?这甚至可能吗?

谢谢

标签: angularangular-servicesangular-libraryangular-providers

解决方案


推荐阅读