首页 > 解决方案 > 未捕获的错误:无法解析 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 中提供它时

有什么帮助吗?

标签: angularservice

解决方案


您的代码中有循环依赖。尝试将服务分开放置并通过导入在组件中使用它们。不要 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)
        })
  }
}

推荐阅读