我在Angular 6上有项目。我的一些服务扩展了基类。基类是不带@Injectable
装饰器的常规TypeScript类。当我尝试运行应用程序时,我收到错误:
NullInjectorError:没有HttpCommonService的提供者!
狂野猜测 - 也许它与某种方式的DI有关(因为我在没有@Component
装饰器的情况下从另一个基类中扩展了一些组件并且它完美地工作),但是,即使在DI情况下,我也是如此。除了扩展服务类之外,我没有创建新的基类实例。
问题是什么,或者至少我应该在哪里搜索问题?
这是基类:
export class HttpCommonService {
constructor(protected http: HttpClient) {}
/* Methods here */
}
这是注入app根目录的服务
@Injectable({ providedIn: 'root' })
export class HttpService extends HttpCommonService {
constructor(protected http: HttpClient) {
super(http);
}
/* Methods here */
}
答案 0 :(得分:0)
这似乎是Angular的错误-当前处于打开状态: ProvidedIn Annotation Not Compatible With Deriving Classes
对于具有基类也是可注入服务的服务,我遇到了同样的问题。您可以尝试链接错误中建议的解决方法:
要解决此问题,在任何派生类中,我们都必须将ngInjectableDef设置为undefined。反过来,这将调用ProvideIn逻辑为我们创建工厂
或者您可以按照ol的方式声明服务,并在NgModule装饰器的providers部分中设置服务类型:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
HttpClientModule
],
providers: [HttpService],
bootstrap: [AppComponent]
})
export class AppModule { }
我知道这不是Angular 6中首选的处理方式,但仍受支持,并且可以解决您的问题。
我可以看到您已经尝试过了。但是,这肯定应该起作用,因为这是我从5升级到Angular 6之前配置服务的方式,这可能表明您错过了一些配置。您还记得从Injectable装饰器中删除了ProvideIn选项吗?