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