angular - Angular EventEmitter 不适用于某些延迟加载的模块
问题描述
我做了SharedModule
。这是SharedService
,它已导入我的app.module.ts
.
我有许多延迟加载的模块,我SharedService
用来将数据从另一个模块的组件发送HeaderModule
到另一个模块的组件。
但它仅适用于某些模块。发生了什么?
我的问题是SharedService
正在EventEmitter
处理仪表板模块。sodashboardModule
的组件在headerComponent
通过 发射数据时可以接收sharedservice
。但它不适用于实时模块的组件。
这是我的代码。
app.module.ts
@NgModule({
declarations: [AppComponent, MainComponent],
imports: [
BrowserModule,
AppRouting,
HttpClientModule,
UiModule,
FormsModule,
BrowserAnimationsModule,
SharedModule.forRoot()
],
providers: [
{ provide: LocationStrategy, useClass: HashLocationStrategy }
],
bootstrap: [AppComponent],
})
export class AppModule {}
shared.module.ts
@NgModule({
imports: [
CommonModule
],
declarations: []
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [SharedService]
}
}
}
共享服务.ts
@Injectable({
providedIn: 'root'
})
export class SharedService {
public themeEmitter: EventEmitter<any> = new EventEmitter<any>();
constructor(private http: HttpClient) {
}
changeTheme(event: any) {
this.themeEmitter.emit(event);
}
onChangeTheme(subscribeFunc: any) {
return this.themeEmitter.subscribe(subscribeFunc);
}
}
ui.module.ts
@NgModule({
declarations: [
],
imports: [
HttpClientModule,
CommonModule,
HeaderModule,
LoginModule
],
exports: [
LoginModule,
HeaderModule
],
providers: [
WebsocketService
]
})
export class UiModule { }
仪表板.lazy.module.ts
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
imports: [
CommonModule,
DashboardRouting,
HttpClientModule,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
},
isolate: true
}),
],
exports: [
TranslateModule
],
declarations: [
DashboardComponent,
...
],
entryComponents: [
...
],
providers: [
DashboardService,
BackendProvider
]
})
export class DashboardModule { }
realtime.lazy.module.ts
export function createTranslateLoader(http: HttpClient) {
return new TranslateHttpLoader(http, './assets/i18n/', '.json');
}
@NgModule({
imports: [
CommonModule,
TreeModule,
MonitoringRouting,
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
},
isolate: true
})
],
declarations: [
...
],
providers: [
RealtimeService
]
})
export class RealtimeModule { }
先感谢您。
解决方案
解决了。
中的导入模块之一RealtimeModule
,SharedService
在提供者中...
这是我的错误。
我认为没有人会遇到与我相同的基本问题,如果您遇到与我相同的问题,SharedModule(SharedService)
则必须仅在根模块中导入或定义提供程序。
推荐阅读
- javascript - 在 useEffect 中设置 setState 导致状态更改延迟的问题
- excel - 如何使用 VBA 在 Excel 中的 5 列中获取“是”和“否”的排列?
- python-3.x - python正则表达式从给定的目录路径中提取file_name
- kubernetes-helm - 删除 helm3 app/release 而不删除 helm2 app/release
- delphi - 在 Delphi 上获取子类的子类的值
- javascript - 尽管在 HTML 源代码中,DOM 中的某些对象似乎没有呈现?
- swiftui - 强制 HStack 中的视图扩展到一定大小
- python - 试图找到一种方法来延迟 Tkinter 画布中循环中的重复循环
- javascript - 如何以及何时使用 Return 语句?
- java - 为什么 maven 无法解析也无法收集以下依赖项:org.eclipse.egit:org.eclipse.egit.gitflow:jar:51.202007141445-r