我有三个模块,一个组合模块,一个身份验证模块和一个记录请求模块。recordrequest 模块需要将 ValuesService 用作单例。我在使用 for root 的身份验证服务中返回一个带有提供程序的模块,并在声明 ValuesService 的提供程序中。然后在 CompositionModule 中导入 AuthModule.forRoot()。这应该在 DI 树中导入 ValuesService 并可供 recordsrequest 模块使用。相反,我看到“没有 ValuesService 的提供者!”
有人可以检查一下他们是否可以发现代码中的错误。如果需要,我可以包括其他部分。
作曲模块
NgModule({
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpModule,
FormsModule,
MaterialModule.forRoot(),
AuthModule.forRoot(),
HttpInterceptorModule,
RouterModule.forRoot(routes),
PubSubModule.forRoot(),
RecordRequestQueueModule
],
providers:
[
SecurityService,
RoleGaurd
],
declarations: [
AuthComponent,
AppComponent,
NavMenuComponent,
RoutingRedirectComponent,
HomeComponent
],
bootstrap:
[
AppComponent
]
})
export class CompositionModule {
}
记录请求队列模块
@NgModule({
imports: [
AuthModule,
CommonModule,
MaterialModule,
HttpModule,
FormsModule,
RouterModule.forChild(recordRequestQueueRoutes)
],
exports: [
RouterModule
],
declarations: [
RecordRequestingQueueComponent,
RecordRequestingWorkItem,
RecordRequestingQueueSection
],
providers: [
QueueClient
]
})
export class RecordRequestQueueModule {
constructor(valuesService: ValuesService) {
console.log("Record Request Queue loaded.");
}
}
认证模块
@NgModule({
imports: [
CommonModule,
HttpModule,
MaterialModule,
FormsModule
],
declarations: [
LoginComponent,
LogoutComponent],
providers: [
LoginClient
],
exports: [
LogoutComponent,
LoginComponent
]
})
export class AuthModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: AuthModule,
providers: [ValuesService]
};
}
constructor() {
console.log("Auth module loaded");
}
}
价值观服务
import { Injectable } from '@angular/core';
@Injectable()
export class ValuesService {
public username: string;
}