我构建了一个具有自己的服务和组件的角度Module
:
@NgModule({
declarations: [ FileUploader],
exports: [ FileUploader ],
imports: [ CommonModule ],
providers: [ FileService ],
})
export class FilesModule { }
和FileService
:
import { Injectable } from '@angular/core';
@Injectable()
export class FileService
{
constructor() {}
uploadFile(file): Promise {
return new Promise((resolve, reject) => {
...
}
}
}
然后我将其导入我的AppModule
:
@NgModule({
declarations: [ AppComponent ],
entryComponents: [ AppComponent ],
imports: [ FilesModule ]
})
export class AppModule { }
当我将FileService
注入AppComponent
时,我会发现一个错误:
AppComponent中的错误:没有文件服务提供商
来自Angular Docs:
当我们导入模块时,Angular将模块的服务提供商(其提供程序列表的内容)添加到应用程序根喷射器中。
这使得提供者可以对应用程序中的每个班级都能看到,以了解提供商的查找令牌。
我缺少什么来完成这项工作?
我总是创建一个ForRoot
方法,当提供者在我的NgModule
中播放时:
@NgModule({
declarations: [FileUploader],
exports: [FileUploader],
imports: [CommonModule]
})
export class FilesModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: FilesModule,
providers: [
FileService
]
}
}
}
然后,您可以在AppModule
中使用它:
@NgModule({
declarations: [AppComponent],
entryComponents: [AppComponent],
imports: [FilesModule.forRoot()]
})
export class AppModule {}
我想您尝试在AppComponent级别使用FileService。如果这样做,则应将FileService添加到AppModule的提供商或在FileModule级别使用FileService。
可能,您忘记了 @injectable()在您的文件服务中