未找到未定义的组件工厂。但确实使用 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]
})

所以我不知道:\有点乱,我什至不确定我是否正确组织了所有依赖项。

  1. 删除所有条目entryComponents
  2. 从除 SharedModule 以外的所有模块中删除 ConfirmDialogComponent 的声明。
  3. SharedModule 导入到使用 ConfirmDialogComponent 的模块中。

所以我想我需要:

  1. 删除所有条目entryComponents
  2. 从除 SharedModule 以外的所有模块中删除 ConfirmDialogComponent 的声明。
  3. SharedModule 导入到使用 ConfirmDialogComponent 的模块中。
  4. entryComponents: [ ConfirmDialogComponent ] 添加到 SharedModule
  5. 在任何子组件中更改 import { ConfirmDialogComponent } 以使用共享组件的新位置