Angular 拒绝承诺:没有服务提供商

Angular 拒绝承诺:没有服务提供商,angular,Angular,我开发了这个apimule,目的是提供UsersService和PlansService等服务: @NgModule({ imports: [ CommonModule, HttpModule ], declarations: [], exports: [], providers: [ PlansService, UsersService ] }) export class ApiModule { 我还创建了一个CoreModule,如: @NgMod

我开发了这个
apimule
,目的是提供
UsersService
PlansService
等服务:

@NgModule({
  imports:      [ CommonModule, HttpModule ],
  declarations: [],
  exports:      [],
  providers:    [ PlansService, UsersService ]
})
export class ApiModule {
我还创建了一个
CoreModule
,如:

@NgModule({
  imports: [
    ApiModule
  ]
})
export class CoreModule { }
我正在
AppModule
上使用它:

@NgModule({
  bootstrap: [ App ],
  declarations: [
    App,
    ErrorComponent
  ],
  imports: [ // import Angular's modules
    BrowserModule,
    CoreModule,
    FormsModule,
    HttpModule,
    RouterModule.forRoot(ROUTES, { useHash: true })
  ]
})
export class AppModule {
export const routes = [
  { path: '', component: LoginComponent, pathMatch: 'full' }
];

@NgModule({
  declarations: [
    LoginComponent
  ],
  imports: [
    RouterModule.forChild(routes),
  ]
})
export default class LoginModule {
我使用
RouterModule
使用延迟加载策略加载组件。路由确认看起来像:

export const ROUTES: Routes = [{
   path: '', redirectTo: 'login', pathMatch: 'full'
}, {
    path: 'login', loadChildren: () => System.import('./login/login.module')
  }, { ...
因此,
LoginModule

@NgModule({
  bootstrap: [ App ],
  declarations: [
    App,
    ErrorComponent
  ],
  imports: [ // import Angular's modules
    BrowserModule,
    CoreModule,
    FormsModule,
    HttpModule,
    RouterModule.forRoot(ROUTES, { useHash: true })
  ]
})
export class AppModule {
export const routes = [
  { path: '', component: LoginComponent, pathMatch: 'full' }
];

@NgModule({
  declarations: [
    LoginComponent
  ],
  imports: [
    RouterModule.forChild(routes),
  ]
})
export default class LoginModule {
然而,我得到的信息是错误的:

未处理的承诺拒绝:用户服务没有提供程序

LoginComponent
正在尝试解决构造函数注入问题:

export class LoginComponent implements OnInit {
    constructor(private commty: UsersService)
    ...
}
但是,
apimule
提供了
users服务
apimule
coremule
中导入,后者在
AppModule
中导入

为什么
LoginModule
无法获取
UsersService
实例


我还尝试将
CoreModule
导入
LoginModule
,但一直失败。

如果您想通过
CoreModule
包含
ApiModule
,您需要从
CoreModule
导出

@NgModule({
  imports: [
    ApiModule
  ],
 exports: [
   ApiModule
 ]
})
export class CoreModule { }
这真的让这成为了一个好消息。 您可能还必须在
LoginModule
中导入
CoreModule
。这与您的延迟加载策略相反。您需要浏览链接中的“为什么不共享用户服务”部分。 它规定:

不要在共享模块中指定应用程序范围的单例提供程序。A. 导入共享模块的延迟加载模块创建自己的副本 服务质量


尝试在LoginModule中导入CoreModule,但始终失败。相同的消息。您没有在
AppModule
中导入
LoginModule
CoreModule
?不,我只是显式导入
CoreModule
LoginModule
加载到my
RouterModule
…它一直失败。我是否也需要在
apimule
上添加
exports:[UsersService]
?让我问你一个相关的问题。有时我看到模块声明提供服务(或任何东西),但它们不会在
exports
中导出每个提供的服务。为什么我需要导出它们?不,您不需要导出服务。我的错。您得到了相同的错误?或者直接导入ApiModule而不是通过coreModule?我在导出中设置了
UsersService
。Angular告诉我,
UsersService
未在
ApiModule
中声明或导入。我已经在
声明中设置了
UsersService
,但是我得到了一个
由模块“ApiModule”声明的意外值“UsersService”
。我真的在为这个问题挣扎。我不知道我需要什么来出口,进口,申报。。。