Angular2没有服务提供商 - 外部模块



我构建了一个具有自己的服务和组件的角度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()在您的文件服务中

最新更新