我有AppModule
导入CoreModule
。 CoreModule
的purpouse将处理数据访问服务,因此CoreModule
提供UserService
,PlansService
等等:
@NgModule({
providers: [
UsersService,
PlansService,
{
provide: LocationStrategy,
useClass: ('production' === ENV ? HashLocationStrategy : PathLocationStrategy)
}
]
})
export class CoreModule { }
所以在AppModule
我导入它:
@NgModule({
bootstrap: [ App ],
declarations: [
App,
ErrorComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
CoreModule, <<<<<<<<<<<<<<<<<<
RouterModule.forRoot(ROUTES, { useHash: true })
]
})
export class AppModule {
然而,在LoginComponent
angular告诉我它无法获得UserService
的提供者:
@Component({
...
})
export class LoginComponent implements OnInit {
constructor(private commty: UsersService)
LoginModule
根据其路由器配置懒惰加载,它是:
export const routes = [
{ path: '', component: LoginComponent, pathMatch: 'full' }
];
@NgModule({
declarations: [
LoginComponent
],
imports: [
CommonModule,
ReactiveFormsModule,
AlertModule,
RouterModule.forChild(routes),
],
})
export default class LoginModule {
static routes = routes;
}
我做错了什么?我需要import
CoreModule
登录LoginModule吗?如果我这样做,那么CoreModule
个实例呢?它加载了两次吗?
这是我从角度得到的错误:
未处理的承诺拒绝:没有UserService的提供商!
答案 0 :(得分:0)
您不必将CoreModule导入LoginModule。您可以通过将UsersService设置为LoginComponent的提供程序来解决问题。
<强> LoginComponent:强>
@Component({
providers: [ UsersService ]
//...
})
export class LoginComponent implements OnInit {
constructor(private commty: UsersService)
}
答案 1 :(得分:0)
因为你正在使用延迟加载,所以你需要在惰性模块和非延迟模块中导入CoreModule。
现在我们已经证明延迟加载的模块可以创建自己的模块 在依赖注入树上分支,我们需要学习如何处理 使用通过共享模块导入的服务 渴望和懒惰的模块。
https://angular-2-training-book.rangle.io/handout/modules/shared-modules-di.html
@NgModule({
declarations: [
LoginComponent
],
imports: [
CommonModule,
ReactiveFormsModule,
AlertModule,
CoreModule, // <- here
RouterModule.forChild(routes),
],
})
export default class LoginModule {
static routes = routes;
}