Angular 错误:Can';t解析'的所有参数;组件';(?,[对象])

Angular 错误:Can';t解析'的所有参数;组件';(?,[对象]),angular,Angular,*我正在跑步 我不明白为什么我会犯这个错误 我通读了关于这个错误的类似SO问题,似乎没有一个明确的答案 我有一个基本类: @Injectable() export class MyBase { constructor(private uri: string, private httpClient: HttpClient) { } public deleteCall(id: string) { return this.httpCli

*我正在跑步

我不明白为什么我会犯这个错误

我通读了关于这个错误的类似SO问题,似乎没有一个明确的答案

我有一个基本类:

 @Injectable()
    export class MyBase {       
      constructor(private uri: string, private httpClient: HttpClient) { }

      public deleteCall(id: string) {
        return this.httpClient
         .delete(this.uri + "/" + id);
      };
   }
我有几个类扩展了这个类:

  @Injectable()
export class GizmoService extends ServiceBase {

  constructor(private http: HttpClient) {
    super(environment.gizmoUri, http);
  }      
}
我将以以下方式实施我的应用程序所提供的服务:

export class GizmoComponent implements OnInit {

  constructor(private router: Router,
    private gizmoService: GizmoService,
    private dialog: MatDialog) { }

  deleteGizmo(id: string) {
    let deleteDialog = ...; 

    deleteDialog.afterClosed()
      .subscribe(x => {
        if (x === true) {
          this.gizmoService.deleteCall(id)
            .subscribe(() => this.loadDataSource());
        }
      });

  };
}
据我所知,将uri字符串从派生类传递到基类似乎是一个问题

我已经检查了我的app.module.ts,并确保派生类在基类之前声明

在我的示例中,我没有看到任何循环引用


此错误的原因是什么?我如何解决此问题?

它与
MyBase
类url参数相关,DI系统尝试将此基作为令牌注入字符串,但没有,这就是为什么您得到
(?,…)
,因此要解决此问题,您需要使用
inject

app.module
中添加
{provide:'url',useValue:'127.0.0.1'}
到提供者列表,并像这样更新
MyBase

@Injectable()
    export class MyBase {       
      constructor(@Inject('url') private uri: string, private httpClient: HttpClient) { }

      public deleteCall(id: string) {
        return this.httpClient
         .delete(this.uri + "/" + id);
      };
   }

决议是两倍的*多亏了爆炸药丸和Silvermind

  • 基类被设置为@Injectable。这是不需要的,因为它将尝试注入没有注入器的“字符串”

  • 我不得不从app.module.ts中的提供者中删除MyBase


  • 一旦这两个步骤都完成,错误就消失了。

    不要将基类标记为
    可注入的
    。否则它将尝试注入没有injectorI从基类中删除@Injectable的“字符串”,并且仍然有相同的错误。您确定更改了正确的类吗?您有两个名称
    MyBase
    ServiceBase
    。或者这是一个输入错误?还要确保不要将基类添加到模块中的提供程序中。一旦我将其从模块中删除,错误就会消失。