angular - 未捕获的错误:无法解析 HacksStorageService 的所有参数:([object Object],?)。在语法错误
问题描述
我在 app.module.ts 中实例化 3 个服务
providers: [AuthService, HackService, HacksStorageService],
HackService如下:
@Injectable()
export class HackService {
hacksChanged = new Subject<Hack[]>();
hacks: Hack[] = [];
constructor(
private hacksStorageService: HacksStorageService,
private authService: AuthService
) {}
etc.
}
HacksStorageService如下:
@Injectable()
export class HacksStorageService {
constructor(
private httpClient: HttpClient,
private hackService: HackService
) {}
fetchHacks(token: string, uid: string) {
this.httpClient.get<Hack[]>(`https://hackaton-refactor.firebaseio.com//${uid}/hacks.json`, {
params: new HttpParams().set('auth', token),
})
.pipe( map( (hacks: Hack[]) => { return hacks = (hacks === null) ? [] : hacks } ) )
.subscribe( (hacks: Hack[]) => this.hackService.setHacks(hacks) )
}
storeHacks(uid: String, token: string, hacks: Hack[]) {
this.httpClient.put(`https://hackaton-app-8a11a.firebaseio.com/${uid}/hacks.json`, hacks, {
params: new HttpParams().set('auth', token)
})
}
}
Angular 在 HacksStorageService 中失败了,他一直告诉我:
Can't resolve all parameters for HacksStorageService: ([object Object], ?)
我不明白为什么他不能注入 HackService 的实例,当我在 app.module.ts 中提供它时
有什么帮助吗?
解决方案
您的代码中有循环依赖。尝试将服务分开放置并通过导入在组件中使用它们。不要 HackService
在这里导入
@Injectable()
export class HacksStorageService {
constructor(
private httpClient: HttpClient,
private hackService: HackService <<-- circular dependency.
) {}
fetchHacks(token: string, uid: string) {
this.httpClient.get<Hack[]>(`https://hackaton-refactor.firebaseio.com//${uid}/hacks.json`, {
params: new HttpParams().set('auth', token),
})
.pipe( map( (hacks: Hack[]) => { return hacks = (hacks === null) ? [] : hacks } ) )
.subscribe( (hacks: Hack[]) => this.hackService.setHacks(hacks) )
}
storeHacks(uid: String, token: string, hacks: Hack[]) {
this.httpClient.put(`https://hackaton-app-8a11a.firebaseio.com/${uid}/hacks.json`, hacks, {
params: new HttpParams().set('auth', token)
})
}
}
推荐阅读
- python - Panda to_datetime 引发警告:tzname CET 已识别但不理解
- c# - System.Windows.Forms.Screen 在显示更改后未更新
- amazon-ec2 - 如何使用 Boto3 将工作负载从一个 ec2 实例迁移到另一个实例
- python - 如何模拟本地 aws 上下文进行测试
- google-places-api - Google maps-places api 找不到类型:鱼塘
- git - .editorconfig - 是否允许两个不同风格的开发人员更容易地 git 合并?
- azure - Azure DevOps REST API - 获取作业的代理池?
- excel - Excel VBA 将文本框(文本和格式)复制到另一个文本框(无 ActiveX / 用户表单)
- r - 使用 `pdp::partial` 并行化部分图会产生 `invalid connection`
- kubernetes - HorizontalPodAutoscaler 基于自定义指标的缩放 - 节点池级别指标