未处理的承诺拒绝,没有服务提供商

时间:2017-02-10 07:41:06

标签: angular

我正在使用第三方npm包。此程序包包含ApiModule,其代码如下:

import { PlansService } from './api/plans.service';
import { UsersService } from './api/users.service';
@NgModule({
  imports:      [ CommonModule, HttpModule ],
  declarations: [],
  exports:      [],
  providers:    [ PlansService, UsersService ]
})
export class ApiModule {
    public static forConfig(configuration: Configuration): ModuleWithProviders {
        return {
            ngModule: ApiModule,
            providers: [ {provide: Configuration, useValue: configuration}]
        }
    }
}

在我的Angular2应用中,我使用的是主AppModule + AppComponentLoginModule + LoginComponent

这是AppModule的代码:

@NgModule({
  bootstrap: [ App ],
  declarations: [
    App,
    ErrorComponent
  ],
  imports: [ // import Angular's modules
    BrowserModule,
    ApiModule,   <<<<<<<<<<<<<<<<<<<<<<<<<<
    FormsModule,
    HttpModule,
    RouterModule.forRoot(ROUTES, { useHash: true })
  ],
  providers: [
    ENV_PROVIDERS,
    APP_PROVIDERS
  ]
})
export class AppModule {

正如您所看到的,LoginModule是按路由加载的。这是LoginModule的代码:

@NgModule({
  declarations: [
    LoginComponent
  ],
  imports: [
    CommonModule,
    ReactiveFormsModule,
    AlertModule,
    ApiModule,   <<<<<<<<<<<<<<<<<<<<<<<<<<<
    RouterModule.forChild(routes),
  ]
})
export default class LoginModule {
  static routes = routes;
}

在我的LoginComponent我尝试UsersService作为构造函数参数注入。然而,它告诉我:

  

未处理的承诺拒绝:没有UserService的提供商!

export class LoginComponent implements OnInit {

    constructor(private commty: UsersService) { ... }

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您尝试将userService注入LoginModule,则必须将其添加为Loginmodule中的提供程序。

@NgModule({
  declarations: [
    LoginComponent
  ],
  imports: [
    CommonModule,
    ReactiveFormsModule,
    AlertModule,
    ApiModule,   <<<<<<<<<<<<<<<<<<<<<<<<<<<
    RouterModule.forChild(routes),
  ],
providers: [UsersService ]
})
export default class LoginModule {
  static routes = routes;
}