angular - 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?这甚至可能吗?
谢谢
解决方案
推荐阅读
- node.js - NPM - 构建 Angular App ELIFECYCLE 时出现节点错误 - 安装 Angular cli 后出现 errno 139
- python - 如何压缩numpy数组列表?
- python - 创建二维凹多边形的笛卡尔网格的算法
- xml - 在 XSD 类型属性中使用 XSD 命名空间前缀
- database - 如何在 MongoDB 文档创建过程中处理现有数据?
- java - 如何从列表中获取匹配和不匹配的字符串
- deep-learning - Mini-batch 表现不如 Batch 梯度下降?
- intellij-idea - IntelliJ 错误:“来自服务器的空响应” - 远程 GlassFish 的运行/调试配置
- c# - 如何使用 Unity 多播 UDP 套接字改进数据同步
- tensorflow - 用于时间序列预测的 Keras 上 CNN-LSTM 中的 NaN 损失