未找到未定义的组件工厂。但确实使用 SharedModule 添加到 @NgModule.entryComponents
No component factory found for undefined. but did add to @NgModule.entryComponents with SharedModule
所以我找到了很多解释这个问题的文章,大多数建议都说将我的组件添加到@NgModule 中的 entryComponents 数组,但我对我拥有的许多模块中的 entryComponents 在哪里或哪些感到困惑。所以基本上我的模块依赖项看起来像:
AppModule
- EnvironmentModule
- ContainerModule
- SharedModule
EnvironmentModule
- ContainerModule
- EnvironmentListItemDetailComponent
private _dialogRef: MatDialogRef<ConfirmDialogComponent>;
ContainerModule
- MatDialogModule,
- ConfirmDialogComponent (this is the component that I want to move)
- ContainerListItemDetailComponent
private _dialogRef: MatDialogRef<ConfirmDialogComponent>;
基本上我想将 ConfirmDialogComponent 从嵌套的子模块移动到共享模块,环境和容器模块都可以依赖该模块。 (我也很想将 ContainerModule 从 EnvironmentModule 下移出,但那是另一天)
所以我想将 ConfirmDialogComponent 移动到一个 SharedModule 中并将所有内容连接起来,应用程序、环境、容器、共享的 @NgModule 是什么样子的?我真的很困惑.. 所以这是我目前所知道的:
shared.module.ts:
@NgModule({
imports: [
CommonModule,
MatDialogModule,
BrowserAnimationsModule
],
declarations: [
ConfirmDialogComponent
],
exports: [
ConfirmDialogComponent
],
entryComponents: [
ConfirmDialogComponent
]
})
export class SharedModule { }
environment.module.ts:
@NgModule({
imports: [
HttpClientModule,
CommonModule,
FormsModule,
EnvironmentRoutingModule,
ContainerModule
],
declarations: [
EnvironmentListComponent,
EnvironmentListEnvironmentsComponent,
EnvironmentListItemDetailComponent,
EnvironmentListItemComponent
],
providers: [... ]
})
container.module.ts:
@NgModule({
imports: [
FormsModule,
CommonModule,
BrowserAnimationsModule,
MatDialogModule,
ContainerRoutingModule
],
declarations: [
KeysPipe,
ContainerListComponent,
ContainerListItemComponent,
ContainerListItemDetailComponent,
ParameterListComponent,
ParameterListItemComponent,
ParameterTypeInfoComponent,
ConfirmDialogComponent
],
exports: [
ContainerListComponent
],
providers: [...],
entryComponents: [ ConfirmDialogComponent ]
})
app.module.ts:
@NgModule({
declarations: [
AppComponent
],
imports: [
FormsModule,
BrowserModule,
AppRoutingModule,
HttpModule,
ContainerModule,
EnvironmentModule,
LoginModule,
SharedModule,
PageNotFoundModule /* DO NOT MOVE THIS - as a result of routing peculiarities the order of child routes matter for handling wildcard ** */
],
providers: [
AppConfigService,
AuthGuardService,
BootstrapService,
EventBrokerService,
HttpClientService,
TruIdTokenService,
StartupService,
{
provide: APP_INITIALIZER,
useFactory: initConfiguration,
deps: [StartupService],
multi: true
}
],
bootstrap: [AppComponent]
})
所以我不知道:\有点乱,我什至不确定我是否正确组织了所有依赖项。
- 删除所有条目
entryComponents
- 从除
SharedModule
以外的所有模块中删除 ConfirmDialogComponent
的声明。
- 将
SharedModule
导入到使用 ConfirmDialogComponent
的模块中。
所以我想我需要:
- 删除所有条目
entryComponents
- 从除
SharedModule
以外的所有模块中删除 ConfirmDialogComponent
的声明。
- 将
SharedModule
导入到使用 ConfirmDialogComponent
的模块中。
- 将
entryComponents: [ ConfirmDialogComponent ]
添加到 SharedModule
- 在任何子组件中更改
import { ConfirmDialogComponent }
以使用共享组件的新位置
所以我找到了很多解释这个问题的文章,大多数建议都说将我的组件添加到@NgModule 中的 entryComponents 数组,但我对我拥有的许多模块中的 entryComponents 在哪里或哪些感到困惑。所以基本上我的模块依赖项看起来像:
AppModule
- EnvironmentModule
- ContainerModule
- SharedModule
EnvironmentModule
- ContainerModule
- EnvironmentListItemDetailComponent
private _dialogRef: MatDialogRef<ConfirmDialogComponent>;
ContainerModule
- MatDialogModule,
- ConfirmDialogComponent (this is the component that I want to move)
- ContainerListItemDetailComponent
private _dialogRef: MatDialogRef<ConfirmDialogComponent>;
基本上我想将 ConfirmDialogComponent 从嵌套的子模块移动到共享模块,环境和容器模块都可以依赖该模块。 (我也很想将 ContainerModule 从 EnvironmentModule 下移出,但那是另一天)
所以我想将 ConfirmDialogComponent 移动到一个 SharedModule 中并将所有内容连接起来,应用程序、环境、容器、共享的 @NgModule 是什么样子的?我真的很困惑.. 所以这是我目前所知道的:
shared.module.ts:
@NgModule({
imports: [
CommonModule,
MatDialogModule,
BrowserAnimationsModule
],
declarations: [
ConfirmDialogComponent
],
exports: [
ConfirmDialogComponent
],
entryComponents: [
ConfirmDialogComponent
]
})
export class SharedModule { }
environment.module.ts:
@NgModule({
imports: [
HttpClientModule,
CommonModule,
FormsModule,
EnvironmentRoutingModule,
ContainerModule
],
declarations: [
EnvironmentListComponent,
EnvironmentListEnvironmentsComponent,
EnvironmentListItemDetailComponent,
EnvironmentListItemComponent
],
providers: [... ]
})
container.module.ts:
@NgModule({
imports: [
FormsModule,
CommonModule,
BrowserAnimationsModule,
MatDialogModule,
ContainerRoutingModule
],
declarations: [
KeysPipe,
ContainerListComponent,
ContainerListItemComponent,
ContainerListItemDetailComponent,
ParameterListComponent,
ParameterListItemComponent,
ParameterTypeInfoComponent,
ConfirmDialogComponent
],
exports: [
ContainerListComponent
],
providers: [...],
entryComponents: [ ConfirmDialogComponent ]
})
app.module.ts:
@NgModule({
declarations: [
AppComponent
],
imports: [
FormsModule,
BrowserModule,
AppRoutingModule,
HttpModule,
ContainerModule,
EnvironmentModule,
LoginModule,
SharedModule,
PageNotFoundModule /* DO NOT MOVE THIS - as a result of routing peculiarities the order of child routes matter for handling wildcard ** */
],
providers: [
AppConfigService,
AuthGuardService,
BootstrapService,
EventBrokerService,
HttpClientService,
TruIdTokenService,
StartupService,
{
provide: APP_INITIALIZER,
useFactory: initConfiguration,
deps: [StartupService],
multi: true
}
],
bootstrap: [AppComponent]
})
所以我不知道:\有点乱,我什至不确定我是否正确组织了所有依赖项。
- 删除所有条目
entryComponents
- 从除
SharedModule
以外的所有模块中删除ConfirmDialogComponent
的声明。 - 将
SharedModule
导入到使用ConfirmDialogComponent
的模块中。
所以我想我需要:
- 删除所有条目
entryComponents
- 从除
SharedModule
以外的所有模块中删除ConfirmDialogComponent
的声明。 - 将
SharedModule
导入到使用ConfirmDialogComponent
的模块中。 - 将
entryComponents: [ ConfirmDialogComponent ]
添加到SharedModule
- 在任何子组件中更改
import { ConfirmDialogComponent }
以使用共享组件的新位置